#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double fabs(double);
double pmax(double, double);
double pmin(double, double);
double sqrt(double);
int cstep(double *stx, double *fx, double *dx, double *sty, double *fy,
          double *dy, double *stp, double *fp, double *dp, int *brackt,
          double stpmin, double stpmax) {
  int info, bound;
  double gamma, p, p66, q, r, s, sgnd, stpc, stpf, stpq, theta;
  info = 0;
  p66 = 0.66;
  if ((*brackt == 1 &&
       (*stp <= pmin(*stx, *sty) || *stp >= pmax(*stx, *sty))) ||
      *dx * (*stp - *stx) >= 0.0 || stpmax < stpmin) {
    return info;
  }
  sgnd = (*dp) * (*dx / fabs(*dx));
  if (*fp > *fx) {
    info = 1;
    bound = 1;
    theta = 3 * (*fx - *fp) / (*stp - *stx) + *dx + *dp;
    s = pmax(fabs(theta), fabs(*dx));
    s = pmax(s, fabs(*dp));
    gamma = s * sqrt((theta / s) * (theta / s) - (*dx / s) * (*dp / s));
    if (*stp < *stx) {
      gamma = -gamma;
    }
    p = (gamma - *dx) + theta;
    q = ((gamma - *dx) + gamma) + *dp;
    r = p / q;
    stpc = *stx + r * (*stp - *stx);
    stpq = *stx +
           ((*dx / ((*fx - *fp) / (*stp - *stx) + *dx)) / 2) * (*stp - *stx);
    if (fabs(stpc - *stx) < fabs(stpq - *stx)) {
      stpf = stpc;
    } else {
      stpf = stpc + (stpq - stpc) / 2;
    }
    *brackt = 1;
  } else if (sgnd < 0.0) {
    info = 2;
    bound = 0;
    theta = 3 * (*fx - *fp) / (*stp - *stx) + *dx + *dp;
    s = pmax(fabs(theta), fabs(*dx));
    s = pmax(s, fabs(*dp));
    gamma = s * sqrt((theta / s) * (theta / s) - (*dx / s) * (*dp / s));
    if (*stp > *stx) {
      gamma = -gamma;
    }
    p = (gamma - *dp) + theta;
    q = ((gamma - *dp) + gamma) + *dx;
    r = p / q;
    stpc = *stp + r * (*stx - *stp);
    stpq = *stp + (*dp / (*dp - *dx)) * (*stx - *stp);
    if (fabs(stpc - *stp) > fabs(stpq - *stp)) {
      stpf = stpc;
    } else {
      stpf = stpq;
    }
    *brackt = 1;
  } else if (fabs(*dp) < fabs(*dx)) {
    info = 3;
    bound = 1;
    theta = 3 * (*fx - *fp) / (*stp - *stx) + *dx + *dp;
    s = pmax(fabs(theta), fabs(*dx));
    s = pmax(s, fabs(*dp));
    gamma =
        s * sqrt(pmax(0., (theta / s) * (theta / s) - (*dx / s) * (*dp / s)));
    if (*stp > *stx) {
      gamma = -gamma;
    }
    p = (gamma - *dp) + theta;
    q = (gamma + (*dx - *dp)) + gamma;
    r = p / q;
    if (r < 0.0 && gamma != 0.0) {
      stpc = *stp + r * (*stx - *stp);
    } else if (*stp > *stx) {
      stpc = stpmax;
    } else {
      stpc = stpmin;
    }
    stpq = *stp + (*dp / (*dp - *dx)) * (*stx - *stp);
    if (*brackt == 1) {
      if (fabs(*stp - stpc) < fabs(*stp - stpq)) {
        stpf = stpc;
      } else {
        stpf = stpq;
      }
    } else {
      if (fabs(*stp - stpc) > fabs(*stp - stpq)) {
        stpf = stpc;
      } else {
        stpf = stpq;
      }
    }
  } else {
    info = 4;
    bound = 0;
    if (*brackt == 1) {
      theta = 3 * (*fp - *fy) / (*sty - *stp) + *dy + *dp;
      s = pmax(fabs(theta), fabs(*dy));
      s = pmax(s, fabs(*dp));
      gamma = s * sqrt((theta / s) * (theta / s) - (*dy / s) * (*dp / s));
      if (*stp > *sty) {
        gamma = -gamma;
      }
      p = (gamma - *dp) + theta;
      q = ((gamma - *dp) + gamma) + *dy;
      r = p / q;
      stpc = *stp + r * (*sty - *stp);
      stpf = stpc;
    } else if (*stp > *stx) {
      stpf = stpmax;
    } else {
      stpf = stpmin;
    }
  }
  if (*fp > *fx) {
    *sty = *stp;
    *fy = *fp;
    *dy = *dp;
  } else {
    if (sgnd < 0.0) {
      *sty = *stx;
      *fy = *fx;
      *dy = *dx;
    }
    *stx = *stp;
    *fx = *fp;
    *dx = *dp;
  }
  stpf = pmin(stpmax, stpf);
  stpf = pmax(stpmin, stpf);
  *stp = stpf;
  if (*brackt == 1 && bound == 1) {
    if (*sty > *stx) {
      *stp = pmin(*stx + p66 * (*sty - *stx), *stp);
    } else {
      *stp = pmax(*stx + p66 * (*sty - *stx), *stp);
    }
  }
  return info;
}


x86 assembly (clang, -O0):
<cstep>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
movsd  %xmm0,-0x40(%rbp)
movsd  %xmm1,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
movsd  0xe84(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    11ff <cstep+0xcf>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
call   1040 <pmin@plt>
movsd  -0xb0(%rbp),%xmm1
ff
ucomisd %xmm1,%xmm0
jae    123c <cstep+0x10c>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
call   1030 <pmax@plt>
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jae    123c <cstep+0x10c>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jae    123c <cstep+0x10c>
movsd  -0x48(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1247 <cstep+0x117>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1f8d <cstep+0xe5d>
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
movaps 0xdba(%rip),%xmm3
pand   %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1565 <cstep+0x435>
movl   $0x1,-0x4c(%rbp)
movl   $0x1,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x18(%rbp),%rax
subsd  (%rax),%xmm1
movsd  0xd52(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
mov    0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movaps 0xd2b(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0xd18(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0xcf6(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
divsd  -0x80(%rbp),%xmm2
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
divsd  -0x80(%rbp),%xmm1
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm3
divsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    13f0 <cstep+0x2c0>
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
addsd  -0x58(%rbp),%xmm0
mov    0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x18(%rbp),%rax
subsd  (%rax),%xmm2
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm3
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm3
divsd  %xmm3,%xmm2
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm2
divsd  %xmm2,%xmm0
movsd  0xb63(%rip),%xmm2
divsd  %xmm2,%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm1
movaps 0xb38(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movaps 0xb1d(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1526 <cstep+0x3f6>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1556 <cstep+0x426>
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm1
ff
subsd  -0x90(%rbp),%xmm1
ff
movsd  0xaca(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    1ddc <cstep+0xcac>
xorps  %xmm0,%xmm0
ucomisd -0x88(%rbp),%xmm0
ff
jbe    17ff <cstep+0x6cf>
movl   $0x2,-0x4c(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x18(%rbp),%rax
subsd  (%rax),%xmm1
movsd  0xa6c(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
mov    0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movaps 0xa45(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0xa32(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0xa10(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
divsd  -0x80(%rbp),%xmm2
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
divsd  -0x80(%rbp),%xmm1
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm3
divsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    16d2 <cstep+0x5a2>
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    0x20(%rbp),%rax
subsd  (%rax),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    0x20(%rbp),%rax
subsd  (%rax),%xmm0
addsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm2
divsd  %xmm2,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm0
movaps 0x87e(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm1
movaps 0x863(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    17e0 <cstep+0x6b0>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    17f0 <cstep+0x6c0>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    1dd7 <cstep+0xca7>
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0x812(%rip),%xmm0
pand   %xmm0,%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movaps 0x7ff(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1ba0 <cstep+0xa70>
movl   $0x3,-0x4c(%rbp)
movl   $0x1,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x18(%rbp),%rax
subsd  (%rax),%xmm1
movsd  0x7b3(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
mov    0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movaps 0x78c(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0x779(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0x757(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm1
ff
divsd  -0x80(%rbp),%xmm1
movsd  -0xa8(%rbp),%xmm2
ff
divsd  -0x80(%rbp),%xmm2
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
divsd  -0x80(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm3
divsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
call   1030 <pmax@plt>
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1993 <cstep+0x863>
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    0x20(%rbp),%rax
subsd  (%rax),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x20(%rbp),%rax
subsd  (%rax),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jbe    1a3c <cstep+0x90c>
movsd  -0x58(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1a0a <cstep+0x8da>
jp     1a0a <cstep+0x8da>
jmp    1a3c <cstep+0x90c>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    1a76 <cstep+0x946>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1a64 <cstep+0x934>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    1a71 <cstep+0x941>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    1a76 <cstep+0x946>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm2
divsd  %xmm2,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1b31 <cstep+0xa01>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
subsd  -0x90(%rbp),%xmm1
ff
movaps 0x542(%rip),%xmm0
pand   %xmm0,%xmm1
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0xa0(%rbp),%xmm0
ff
movaps 0x527(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1b1c <cstep+0x9ec>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1b2c <cstep+0x9fc>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1b9b <cstep+0xa6b>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movaps 0x4d8(%rip),%xmm1
pand   %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
subsd  -0xa0(%rbp),%xmm1
ff
movaps 0x4bd(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1b86 <cstep+0xa56>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1b96 <cstep+0xa66>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1b9b <cstep+0xa6b>
jmp    1dd2 <cstep+0xca2>
movl   $0x4,-0x4c(%rbp)
movl   $0x0,-0x50(%rbp)
mov    0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1d93 <cstep+0xc63>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x30(%rbp),%rax
subsd  (%rax),%xmm1
movsd  0x435(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm1
divsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
addsd  (%rax),%xmm0
mov    0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movaps 0x40e(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0x3fb(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0x3d9(%rip),%xmm2
pand   %xmm2,%xmm1
call   1030 <pmax@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
divsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
divsd  -0x80(%rbp),%xmm2
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm1
divsd  -0x80(%rbp),%xmm1
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm3
divsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1d09 <cstep+0xbd9>
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    0x20(%rbp),%rax
subsd  (%rax),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    0x20(%rbp),%rax
subsd  (%rax),%xmm0
addsd  -0x58(%rbp),%xmm0
mov    -0x38(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1dcd <cstep+0xc9d>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1dbb <cstep+0xc8b>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1dc8 <cstep+0xc98>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1dcd <cstep+0xc9d>
jmp    1dd2 <cstep+0xca2>
jmp    1dd7 <cstep+0xca7>
jmp    1ddc <cstep+0xcac>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1e27 <cstep+0xcf7>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1e98 <cstep+0xd68>
xorps  %xmm0,%xmm0
ucomisd -0x88(%rbp),%xmm0
ff
jbe    1e68 <cstep+0xd38>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x48(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm1
ff
call   1040 <pmin@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm1
ff
call   1030 <pmax@plt>
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1f87 <cstep+0xe57>
cmpl   $0x1,-0x50(%rbp)
jne    1f87 <cstep+0xe57>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1f48 <cstep+0xe18>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
call   1040 <pmin@plt>
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1f82 <cstep+0xe52>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
call   1030 <pmax@plt>
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1f87 <cstep+0xe57>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cstep>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
movapd %xmm1,%xmm9
movapd %xmm0,%xmm8
mov    %r9,0x38(%rsp)
mov    %r8,0x58(%rsp)
mov    %rdi,%r14
mov    0xd8(%rsp),%r12
mov    0xc0(%rsp),%r13
cmpl   $0x1,(%r12)
jne    11f8 <cstep+0xc8>
mov    %rdx,%r12
mov    %rsi,%rbx
movapd %xmm9,0x10(%rsp)
movapd %xmm8,0x60(%rsp)
movsd  0x0(%r13),%xmm0
movsd  %xmm0,(%rsp)
movsd  (%r14),%xmm0
movsd  (%rcx),%xmm1
mov    %rcx,%r15
call   1040 <pmin@plt>
xor    %ebp,%ebp
ucomisd (%rsp),%xmm0
jae    1abc <cstep+0x98c>
movsd  0x0(%r13),%xmm0
movsd  %xmm0,(%rsp)
movsd  (%r14),%xmm0
movsd  (%r15),%xmm1
call   1030 <pmax@plt>
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd 0x60(%rsp),%xmm8
movapd 0x10(%rsp),%xmm9
mov    %r15,%rcx
mov    %rbx,%rsi
mov    %r12,%rdx
mov    0xd8(%rsp),%r12
jae    1abc <cstep+0x98c>
xor    %ebp,%ebp
ucomisd %xmm9,%xmm8
ja     1abc <cstep+0x98c>
movsd  (%rdx),%xmm3
movsd  0x0(%r13),%xmm13
movsd  (%r14),%xmm1
movapd %xmm13,%xmm4
subsd  %xmm1,%xmm4
movapd %xmm3,%xmm2
mulsd  %xmm4,%xmm2
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm2
jae    1abc <cstep+0x98c>
mov    0xd0(%rsp),%rdi
mov    0xc8(%rsp),%rbx
movsd  (%rdi),%xmm0
movapd 0xdb1(%rip),%xmm2
andpd  %xmm3,%xmm2
movapd %xmm3,%xmm10
divsd  %xmm2,%xmm10
mulsd  %xmm0,%xmm10
movsd  (%rbx),%xmm5
movsd  (%rsi),%xmm6
ucomisd %xmm6,%xmm5
movapd %xmm8,0x60(%rsp)
movapd %xmm9,0x10(%rsp)
movapd %xmm10,0x40(%rsp)
jbe    1333 <cstep+0x203>
mov    %rsi,%r13
mov    %rcx,%rbp
subsd  %xmm5,%xmm6
mulsd  0xd85(%rip),%xmm6
divsd  %xmm4,%xmm6
addsd  %xmm6,%xmm3
addsd  %xmm3,%xmm0
movapd %xmm0,(%rsp)
andpd  0xd4c(%rip),%xmm0
movapd %xmm2,%xmm1
mov    %rdx,%rbx
mov    %rdi,%r15
call   1030 <pmax@plt>
movsd  (%r15),%xmm1
andps  0xd31(%rip),%xmm1
call   1030 <pmax@plt>
movapd (%rsp),%xmm6
movapd %xmm0,%xmm4
movapd %xmm6,%xmm0
movsd  (%rbx),%xmm1
xorpd  0xd23(%rip),%xmm1
divsd  %xmm4,%xmm0
movhpd (%r15),%xmm1
movapd %xmm4,%xmm2
unpcklpd %xmm4,%xmm2
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     13ec <cstep+0x2bc>
mov    %r15,%rdi
mov    %rbx,%rdx
sqrtsd %xmm0,%xmm0
jmp    1408 <cstep+0x2d8>
xorpd  %xmm7,%xmm7
ucomisd %xmm10,%xmm7
jbe    150d <cstep+0x3dd>
mov    %rsi,%r13
mov    %rcx,%r15
subsd  %xmm5,%xmm6
mulsd  0xccc(%rip),%xmm6
divsd  %xmm4,%xmm6
addsd  %xmm6,%xmm3
addsd  %xmm3,%xmm0
movapd %xmm0,(%rsp)
andpd  0xc93(%rip),%xmm0
movapd %xmm2,%xmm1
mov    %rdx,%rbx
mov    %rdi,%rbp
call   1030 <pmax@plt>
movsd  0x0(%rbp),%xmm1
andps  0xc78(%rip),%xmm1
call   1030 <pmax@plt>
movapd (%rsp),%xmm6
movapd %xmm0,%xmm4
movapd %xmm6,%xmm0
divsd  %xmm4,%xmm0
movsd  (%rbx),%xmm1
xorpd  0xc66(%rip),%xmm1
movhpd 0x0(%rbp),%xmm1
movapd %xmm4,%xmm2
unpcklpd %xmm4,%xmm2
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
ucomisd 0xc69(%rip),%xmm0
jb     15d4 <cstep+0x4a4>
mov    %rbp,%rdi
mov    %rbx,%rdx
sqrtsd %xmm0,%xmm0
jmp    15f0 <cstep+0x4c0>
movapd %xmm4,0x20(%rsp)
call   1050 <sqrt@plt>
movapd 0x20(%rsp),%xmm4
movapd (%rsp),%xmm6
mov    %r15,%rdi
mov    %rbx,%rdx
movapd 0x10(%rsp),%xmm9
mov    %rbp,%rcx
mov    %r13,%rsi
mov    0xc8(%rsp),%rbx
movapd 0x40(%rsp),%xmm10
mov    0xc0(%rsp),%rax
movapd 0xbcc(%rip),%xmm7
mulsd  %xmm0,%xmm4
movsd  (%rax),%xmm13
movsd  (%r14),%xmm1
movapd 0xbc6(%rip),%xmm2
xorpd  %xmm4,%xmm2
movapd %xmm13,%xmm3
cmpltsd %xmm1,%xmm3
andpd  %xmm3,%xmm2
andnpd %xmm4,%xmm3
orpd   %xmm2,%xmm3
movsd  (%rdx),%xmm2
movapd %xmm3,%xmm4
subsd  %xmm2,%xmm4
addsd  %xmm4,%xmm6
addsd  %xmm3,%xmm4
addsd  (%rdi),%xmm4
divsd  %xmm4,%xmm6
movapd %xmm13,%xmm3
subsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm6
addsd  %xmm1,%xmm6
movsd  0x0(%r13),%xmm4
subsd  (%rbx),%xmm4
divsd  %xmm3,%xmm4
addsd  %xmm2,%xmm4
divsd  %xmm4,%xmm2
movsd  0xb79(%rip),%xmm4
mulsd  %xmm4,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movapd %xmm6,%xmm3
subsd  %xmm1,%xmm3
andpd  %xmm7,%xmm3
movapd %xmm2,%xmm5
subsd  %xmm1,%xmm5
andpd  %xmm7,%xmm5
cmpltsd %xmm5,%xmm3
subsd  %xmm6,%xmm2
mulsd  %xmm4,%xmm2
movsd  0xb48(%rip),%xmm1
andpd  %xmm3,%xmm1
andnpd %xmm2,%xmm3
orpd   %xmm3,%xmm1
addsd  %xmm6,%xmm1
movl   $0x1,(%r12)
mov    $0x1,%ebp
mov    $0x1,%r13b
jmp    19de <cstep+0x8ae>
movapd 0xaeb(%rip),%xmm7
andpd  %xmm0,%xmm7
ucomisd %xmm7,%xmm2
jbe    16d3 <cstep+0x5a3>
mov    %rsi,%r13
mov    %rcx,%r12
subsd  %xmm5,%xmm6
mulsd  0xaeb(%rip),%xmm6
divsd  %xmm4,%xmm6
addsd  %xmm6,%xmm3
addsd  %xmm3,%xmm0
movapd %xmm0,(%rsp)
andpd  0xab2(%rip),%xmm0
movapd %xmm2,%xmm1
mov    %rdx,%rbx
mov    %rdi,%rbp
call   1030 <pmax@plt>
movsd  0x0(%rbp),%xmm1
andps  0xa97(%rip),%xmm1
call   1030 <pmax@plt>
movapd %xmm0,%xmm2
movapd (%rsp),%xmm1
divsd  %xmm0,%xmm1
mov    %rbx,%r15
movsd  (%rbx),%xmm0
xorpd  0xa86(%rip),%xmm0
mov    %rbp,%rbx
movhpd 0x0(%rbp),%xmm0
movapd %xmm2,0x20(%rsp)
unpcklpd %xmm2,%xmm2
divpd  %xmm2,%xmm0
movapd %xmm0,%xmm2
unpckhpd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
xorpd  %xmm0,%xmm0
call   1030 <pmax@plt>
ucomisd 0xa7b(%rip),%xmm0
jb     17a2 <cstep+0x672>
sqrtsd %xmm0,%xmm0
jmp    17a7 <cstep+0x677>
movapd %xmm4,0x20(%rsp)
call   1050 <sqrt@plt>
movapd 0x20(%rsp),%xmm4
movapd (%rsp),%xmm6
mov    %rbp,%rdi
mov    %rbx,%rdx
movapd 0x10(%rsp),%xmm9
mov    %r15,%rcx
mov    %r13,%rsi
mov    0xc8(%rsp),%rbx
movapd 0x40(%rsp),%xmm10
mov    0xc0(%rsp),%rax
mulsd  %xmm0,%xmm4
movsd  (%rax),%xmm13
movsd  (%r14),%xmm2
movapd 0x9e6(%rip),%xmm1
xorpd  %xmm4,%xmm1
movapd %xmm2,%xmm3
cmpltsd %xmm13,%xmm3
andpd  %xmm3,%xmm1
andnpd %xmm4,%xmm3
orpd   %xmm1,%xmm3
movsd  (%rdi),%xmm1
movapd %xmm3,%xmm4
subsd  %xmm1,%xmm4
addsd  %xmm4,%xmm6
addsd  %xmm3,%xmm4
movsd  (%rdx),%xmm3
subsd  %xmm13,%xmm2
unpcklpd %xmm1,%xmm5
addsd  %xmm3,%xmm4
unpcklpd %xmm3,%xmm3
subpd  %xmm3,%xmm5
movsd  %xmm4,%xmm5
unpcklpd %xmm1,%xmm6
divpd  %xmm5,%xmm6
unpcklpd %xmm2,%xmm2
mulpd  %xmm6,%xmm2
movapd %xmm13,%xmm1
unpcklpd %xmm13,%xmm1
addpd  %xmm1,%xmm2
movapd %xmm2,%xmm3
subpd  %xmm1,%xmm3
andpd  0x95d(%rip),%xmm3
pshufd $0xee,%xmm3,%xmm1
cmpltsd %xmm3,%xmm1
movapd %xmm1,%xmm3
andpd  %xmm2,%xmm3
unpckhpd %xmm2,%xmm2
andnpd %xmm2,%xmm1
orpd   %xmm3,%xmm1
movl   $0x1,(%r12)
mov    $0x2,%ebp
jmp    19db <cstep+0x8ab>
cmpl   $0x1,(%r12)
jne    18f2 <cstep+0x7c2>
mov    %rdx,0x20(%rsp)
mov    %rsi,%r13
mov    0x58(%rsp),%rax
subsd  (%rax),%xmm5
mulsd  0x929(%rip),%xmm5
mov    %rcx,%rbp
movsd  (%rcx),%xmm1
subsd  %xmm13,%xmm1
divsd  %xmm1,%xmm5
mov    0x38(%rsp),%r15
movsd  (%r15),%xmm1
addsd  %xmm1,%xmm5
addsd  %xmm5,%xmm0
movapd %xmm0,(%rsp)
movapd 0x8da(%rip),%xmm2
andpd  %xmm2,%xmm0
andpd  %xmm2,%xmm1
mov    %rdi,%rbx
call   1030 <pmax@plt>
movsd  (%rbx),%xmm1
andps  0x8bf(%rip),%xmm1
call   1030 <pmax@plt>
movapd (%rsp),%xmm5
movapd %xmm0,%xmm4
movapd %xmm5,%xmm0
movsd  (%r15),%xmm1
xorpd  0x8b0(%rip),%xmm1
divsd  %xmm4,%xmm0
movhpd (%rbx),%xmm1
movapd %xmm4,%xmm2
unpcklpd %xmm4,%xmm2
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1935 <cstep+0x805>
mov    %rbx,%rdi
sqrtsd %xmm0,%xmm0
jmp    194e <cstep+0x81e>
call   1050 <sqrt@plt>
movapd 0x60(%rsp),%xmm8
movapd 0x10(%rsp),%xmm9
mov    %r12,%rcx
mov    %r13,%rsi
mov    %r15,%rdx
mov    0xd8(%rsp),%r12
mov    %rbx,%rdi
mov    0xc8(%rsp),%rbx
movapd 0x40(%rsp),%xmm10
movapd (%rsp),%xmm7
mov    0xc0(%rsp),%rax
movapd 0x812(%rip),%xmm12
movapd 0x20(%rsp),%xmm4
mulsd  %xmm0,%xmm4
movsd  (%rax),%xmm13
movsd  (%r14),%xmm1
ucomisd %xmm1,%xmm13
movapd 0x801(%rip),%xmm2
xorpd  %xmm4,%xmm2
movapd %xmm1,%xmm3
cmpltsd %xmm13,%xmm3
andpd  %xmm3,%xmm2
andnpd %xmm4,%xmm3
orpd   %xmm2,%xmm3
movsd  (%rdi),%xmm2
movapd %xmm3,%xmm4
subsd  %xmm2,%xmm4
addsd  %xmm4,%xmm7
movsd  (%r15),%xmm11
movapd %xmm11,%xmm5
subsd  %xmm2,%xmm5
addsd  %xmm3,%xmm5
addsd  %xmm3,%xmm5
divsd  %xmm5,%xmm7
subsd  %xmm13,%xmm1
movapd %xmm7,%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm13,%xmm5
movapd %xmm9,%xmm6
ja     1871 <cstep+0x741>
movapd %xmm8,%xmm6
xorpd  %xmm4,%xmm4
cmpltsd %xmm4,%xmm7
cmpneqsd %xmm4,%xmm3
andpd  %xmm3,%xmm5
andnpd %xmm6,%xmm3
orpd   %xmm5,%xmm3
andpd  %xmm7,%xmm3
andnpd %xmm6,%xmm7
orpd   %xmm3,%xmm7
movapd %xmm2,%xmm3
subsd  %xmm11,%xmm3
divsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm13,%xmm2
cmpl   $0x1,(%r12)
movapd %xmm13,%xmm1
subsd  %xmm7,%xmm1
andpd  %xmm12,%xmm1
movapd %xmm13,%xmm3
subsd  %xmm2,%xmm3
andpd  %xmm12,%xmm3
jne    190f <cstep+0x7df>
cmpltsd %xmm3,%xmm1
movapd %xmm1,%xmm3
andpd  %xmm7,%xmm3
andnpd %xmm2,%xmm1
orpd   %xmm3,%xmm1
mov    $0x3,%ebp
mov    $0x1,%r13b
jmp    19de <cstep+0x8ae>
cmpltsd %xmm13,%xmm1
movapd %xmm1,%xmm2
andpd  %xmm9,%xmm2
andnpd %xmm8,%xmm1
orpd   %xmm2,%xmm1
jmp    19d6 <cstep+0x8a6>
cmpltsd %xmm1,%xmm3
movapd %xmm3,%xmm1
andpd  %xmm7,%xmm1
andnpd %xmm2,%xmm3
orpd   %xmm1,%xmm3
mov    $0x3,%ebp
mov    $0x1,%r13b
movapd %xmm3,%xmm1
jmp    19de <cstep+0x8ae>
movapd %xmm4,0x70(%rsp)
call   1050 <sqrt@plt>
movapd 0x70(%rsp),%xmm4
movapd (%rsp),%xmm5
mov    %rbx,%rdi
movapd 0x10(%rsp),%xmm9
mov    %rbp,%rcx
mov    %r13,%rsi
mov    0x20(%rsp),%rdx
mov    0xc8(%rsp),%rbx
movapd 0x40(%rsp),%xmm10
mov    0xc0(%rsp),%rax
mulsd  %xmm0,%xmm4
movsd  (%rax),%xmm13
movsd  0x0(%rbp),%xmm1
movapd 0x683(%rip),%xmm2
xorpd  %xmm4,%xmm2
movapd %xmm1,%xmm3
cmpltsd %xmm13,%xmm3
andpd  %xmm3,%xmm2
andnpd %xmm4,%xmm3
orpd   %xmm2,%xmm3
movsd  (%rdi),%xmm2
movapd %xmm3,%xmm4
subsd  %xmm2,%xmm4
addsd  %xmm4,%xmm5
addsd  %xmm3,%xmm4
mov    0x38(%rsp),%rax
addsd  (%rax),%xmm4
divsd  %xmm4,%xmm5
subsd  %xmm13,%xmm1
mulsd  %xmm5,%xmm1
addsd  %xmm13,%xmm1
mov    $0x4,%ebp
xor    %r13d,%r13d
movsd  (%rbx),%xmm2
ucomisd (%rsi),%xmm2
jbe    19fc <cstep+0x8cc>
mov    %rcx,%r15
movsd  %xmm13,(%rcx)
mov    0x58(%rsp),%rax
mov    0x38(%rsp),%rdx
jmp    1a42 <cstep+0x912>
xorpd  %xmm2,%xmm2
ucomisd %xmm10,%xmm2
jbe    1a37 <cstep+0x907>
movsd  (%r14),%xmm0
movsd  %xmm0,(%rcx)
movsd  (%rsi),%xmm0
mov    0x58(%rsp),%rax
movsd  %xmm0,(%rax)
movsd  (%rdx),%xmm0
mov    0x38(%rsp),%rax
movsd  %xmm0,(%rax)
mov    0xc0(%rsp),%rax
movsd  (%rax),%xmm13
mov    %rsi,%rax
mov    %rcx,%r15
movsd  %xmm13,(%r14)
movsd  (%rbx),%xmm0
movsd  %xmm0,(%rax)
movsd  (%rdi),%xmm0
movsd  %xmm0,(%rdx)
movapd %xmm9,%xmm0
call   1040 <pmin@plt>
movapd %xmm0,%xmm1
movapd 0x60(%rsp),%xmm0
call   1030 <pmax@plt>
mov    0xc0(%rsp),%rbx
movsd  %xmm0,(%rbx)
cmpl   $0x1,(%r12)
setne  %al
xor    $0x1,%r13b
or     %al,%r13b
jne    1abc <cstep+0x98c>
movapd %xmm0,%xmm1
movsd  (%r15),%xmm0
movsd  (%r14),%xmm2
ucomisd %xmm2,%xmm0
subsd  %xmm2,%xmm0
mulsd  0x592(%rip),%xmm0
addsd  %xmm2,%xmm0
jbe    1ab3 <cstep+0x983>
call   1040 <pmin@plt>
jmp    1ab8 <cstep+0x988>
call   1030 <pmax@plt>
movsd  %xmm0,(%rbx)
mov    %ebp,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @cstep(double* %0, double* %1, double* %2, double* %3, double* %4, double* %5, double* %6, double* %7, double* %8, i32* %9, double %10, double %11) {
%13 = alloca i32
%14 = alloca double*
%15 = alloca double*
%16 = alloca double*
%17 = alloca double*
%18 = alloca double*
%19 = alloca double*
%20 = alloca double*
%21 = alloca double*
%22 = alloca double*
%23 = alloca i32*
%24 = alloca double
%25 = alloca double
%26 = alloca i32
%27 = alloca i32
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
store double* %0, double** %14
store double* %1, double** %15
store double* %2, double** %16
store double* %3, double** %17
store double* %4, double** %18
store double* %5, double** %19
store double* %6, double** %20
store double* %7, double** %21
store double* %8, double** %22
store i32* %9, i32** %23
store double %10, double* %24
store double %11, double* %25
store i32 0, i32* %26
store double 6.600000e-01, double* %30
%39 = load i32*, i32** %23
%40 = load i32, i32* %39
%41 = icmp eq i32 %40, 1
br i1 %41, label %42, label %60
42: ; preds = %12
%43 = load double*, double** %20
%44 = load double, double* %43
%45 = load double*, double** %14
%46 = load double, double* %45
%47 = load double*, double** %17
%48 = load double, double* %47
%49 = call double @pmin(double %46, double %48)
%50 = fcmp ole double %44, %49
br i1 %50, label %74, label %51
51: ; preds = %42
%52 = load double*, double** %20
%53 = load double, double* %52
%54 = load double*, double** %14
%55 = load double, double* %54
%56 = load double*, double** %17
%57 = load double, double* %56
%58 = call double @pmax(double %55, double %57)
%59 = fcmp oge double %53, %58
br i1 %59, label %74, label %60
60: ; preds = %51, %12
%61 = load double*, double** %16
%62 = load double, double* %61
%63 = load double*, double** %20
%64 = load double, double* %63
%65 = load double*, double** %14
%66 = load double, double* %65
%67 = fsub double %64, %66
%68 = fmul double %62, %67
%69 = fcmp oge double %68, 0.000000e+00
br i1 %69, label %74, label %70
70: ; preds = %60
%71 = load double, double* %25
%72 = load double, double* %24
%73 = fcmp olt double %71, %72
br i1 %73, label %74, label %76
74: ; preds = %70, %60, %51, %42
%75 = load i32, i32* %26
store i32 %75, i32* %13
br label %710
76: ; preds = %70
%77 = load double*, double** %22
%78 = load double, double* %77
%79 = load double*, double** %16
%80 = load double, double* %79
%81 = load double*, double** %16
%82 = load double, double* %81
%83 = call double @llvm.fabs.f64(double %82)
%84 = fdiv double %80, %83
%85 = fmul double %78, %84
store double %85, double* %34
%86 = load double*, double** %21
%87 = load double, double* %86
%88 = load double*, double** %15
%89 = load double, double* %88
%90 = fcmp ogt double %87, %89
br i1 %90, label %91, label %225
91: ; preds = %76
store i32 1, i32* %26
store i32 1, i32* %27
%92 = load double*, double** %15
%93 = load double, double* %92
%94 = load double*, double** %21
%95 = load double, double* %94
%96 = fsub double %93, %95
%97 = fmul double 3.000000e+00, %96
%98 = load double*, double** %20
%99 = load double, double* %98
%100 = load double*, double** %14
%101 = load double, double* %100
%102 = fsub double %99, %101
%103 = fdiv double %97, %102
%104 = load double*, double** %16
%105 = load double, double* %104
%106 = fadd double %103, %105
%107 = load double*, double** %22
%108 = load double, double* %107
%109 = fadd double %106, %108
store double %109, double* %38
%110 = load double, double* %38
%111 = call double @llvm.fabs.f64(double %110)
%112 = load double*, double** %16
%113 = load double, double* %112
%114 = call double @llvm.fabs.f64(double %113)
%115 = call double @pmax(double %111, double %114)
store double %115, double* %33
%116 = load double, double* %33
%117 = load double*, double** %22
%118 = load double, double* %117
%119 = call double @llvm.fabs.f64(double %118)
%120 = call double @pmax(double %116, double %119)
store double %120, double* %33
%121 = load double, double* %33
%122 = load double, double* %38
%123 = load double, double* %33
%124 = fdiv double %122, %123
%125 = load double, double* %38
%126 = load double, double* %33
%127 = fdiv double %125, %126
%128 = load double*, double** %16
%129 = load double, double* %128
%130 = load double, double* %33
%131 = fdiv double %129, %130
%132 = load double*, double** %22
%133 = load double, double* %132
%134 = load double, double* %33
%135 = fdiv double %133, %134
%136 = fmul double %131, %135
%137 = fneg double %136
%138 = call double @llvm.fmuladd.f64(double %124, double %127, double %137)
%139 = call double @sqrt(double %138)
%140 = fmul double %121, %139
store double %140, double* %28
%141 = load double*, double** %20
%142 = load double, double* %141
%143 = load double*, double** %14
%144 = load double, double* %143
%145 = fcmp olt double %142, %144
br i1 %145, label %146, label %149
146: ; preds = %91
%147 = load double, double* %28
%148 = fneg double %147
store double %148, double* %28
br label %149
149: ; preds = %146, %91
%150 = load double, double* %28
%151 = load double*, double** %16
%152 = load double, double* %151
%153 = fsub double %150, %152
%154 = load double, double* %38
%155 = fadd double %153, %154
store double %155, double* %29
%156 = load double, double* %28
%157 = load double*, double** %16
%158 = load double, double* %157
%159 = fsub double %156, %158
%160 = load double, double* %28
%161 = fadd double %159, %160
%162 = load double*, double** %22
%163 = load double, double* %162
%164 = fadd double %161, %163
store double %164, double* %31
%165 = load double, double* %29
%166 = load double, double* %31
%167 = fdiv double %165, %166
store double %167, double* %32
%168 = load double*, double** %14
%169 = load double, double* %168
%170 = load double, double* %32
%171 = load double*, double** %20
%172 = load double, double* %171
%173 = load double*, double** %14
%174 = load double, double* %173
%175 = fsub double %172, %174
%176 = call double @llvm.fmuladd.f64(double %170, double %175, double %169)
store double %176, double* %35
%177 = load double*, double** %14
%178 = load double, double* %177
%179 = load double*, double** %16
%180 = load double, double* %179
%181 = load double*, double** %15
%182 = load double, double* %181
%183 = load double*, double** %21
%184 = load double, double* %183
%185 = fsub double %182, %184
%186 = load double*, double** %20
%187 = load double, double* %186
%188 = load double*, double** %14
%189 = load double, double* %188
%190 = fsub double %187, %189
%191 = fdiv double %185, %190
%192 = load double*, double** %16
%193 = load double, double* %192
%194 = fadd double %191, %193
%195 = fdiv double %180, %194
%196 = fdiv double %195, 2.000000e+00
%197 = load double*, double** %20
%198 = load double, double* %197
%199 = load double*, double** %14
%200 = load double, double* %199
%201 = fsub double %198, %200
%202 = call double @llvm.fmuladd.f64(double %196, double %201, double %178)
store double %202, double* %37
%203 = load double, double* %35
%204 = load double*, double** %14
%205 = load double, double* %204
%206 = fsub double %203, %205
%207 = call double @llvm.fabs.f64(double %206)
%208 = load double, double* %37
%209 = load double*, double** %14
%210 = load double, double* %209
%211 = fsub double %208, %210
%212 = call double @llvm.fabs.f64(double %211)
%213 = fcmp olt double %207, %212
br i1 %213, label %214, label %216
214: ; preds = %149
%215 = load double, double* %35
store double %215, double* %36
br label %223
216: ; preds = %149
%217 = load double, double* %35
%218 = load double, double* %37
%219 = load double, double* %35
%220 = fsub double %218, %219
%221 = fdiv double %220, 2.000000e+00
%222 = fadd double %217, %221
store double %222, double* %36
br label %223
223: ; preds = %216, %214
%224 = load i32*, i32** %23
store i32 1, i32* %224
br label %619
225: ; preds = %76
%226 = load double, double* %34
%227 = fcmp olt double %226, 0.000000e+00
br i1 %227, label %228, label %347
228: ; preds = %225
store i32 2, i32* %26
store i32 0, i32* %27
%229 = load double*, double** %15
%230 = load double, double* %229
%231 = load double*, double** %21
%232 = load double, double* %231
%233 = fsub double %230, %232
%234 = fmul double 3.000000e+00, %233
%235 = load double*, double** %20
%236 = load double, double* %235
%237 = load double*, double** %14
%238 = load double, double* %237
%239 = fsub double %236, %238
%240 = fdiv double %234, %239
%241 = load double*, double** %16
%242 = load double, double* %241
%243 = fadd double %240, %242
%244 = load double*, double** %22
%245 = load double, double* %244
%246 = fadd double %243, %245
store double %246, double* %38
%247 = load double, double* %38
%248 = call double @llvm.fabs.f64(double %247)
%249 = load double*, double** %16
%250 = load double, double* %249
%251 = call double @llvm.fabs.f64(double %250)
%252 = call double @pmax(double %248, double %251)
store double %252, double* %33
%253 = load double, double* %33
%254 = load double*, double** %22
%255 = load double, double* %254
%256 = call double @llvm.fabs.f64(double %255)
%257 = call double @pmax(double %253, double %256)
store double %257, double* %33
%258 = load double, double* %33
%259 = load double, double* %38
%260 = load double, double* %33
%261 = fdiv double %259, %260
%262 = load double, double* %38
%263 = load double, double* %33
%264 = fdiv double %262, %263
%265 = load double*, double** %16
%266 = load double, double* %265
%267 = load double, double* %33
%268 = fdiv double %266, %267
%269 = load double*, double** %22
%270 = load double, double* %269
%271 = load double, double* %33
%272 = fdiv double %270, %271
%273 = fmul double %268, %272
%274 = fneg double %273
%275 = call double @llvm.fmuladd.f64(double %261, double %264, double %274)
%276 = call double @sqrt(double %275)
%277 = fmul double %258, %276
store double %277, double* %28
%278 = load double*, double** %20
%279 = load double, double* %278
%280 = load double*, double** %14
%281 = load double, double* %280
%282 = fcmp ogt double %279, %281
br i1 %282, label %283, label %286
283: ; preds = %228
%284 = load double, double* %28
%285 = fneg double %284
store double %285, double* %28
br label %286
286: ; preds = %283, %228
%287 = load double, double* %28
%288 = load double*, double** %22
%289 = load double, double* %288
%290 = fsub double %287, %289
%291 = load double, double* %38
%292 = fadd double %290, %291
store double %292, double* %29
%293 = load double, double* %28
%294 = load double*, double** %22
%295 = load double, double* %294
%296 = fsub double %293, %295
%297 = load double, double* %28
%298 = fadd double %296, %297
%299 = load double*, double** %16
%300 = load double, double* %299
%301 = fadd double %298, %300
store double %301, double* %31
%302 = load double, double* %29
%303 = load double, double* %31
%304 = fdiv double %302, %303
store double %304, double* %32
%305 = load double*, double** %20
%306 = load double, double* %305
%307 = load double, double* %32
%308 = load double*, double** %14
%309 = load double, double* %308
%310 = load double*, double** %20
%311 = load double, double* %310
%312 = fsub double %309, %311
%313 = call double @llvm.fmuladd.f64(double %307, double %312, double %306)
store double %313, double* %35
%314 = load double*, double** %20
%315 = load double, double* %314
%316 = load double*, double** %22
%317 = load double, double* %316
%318 = load double*, double** %22
%319 = load double, double* %318
%320 = load double*, double** %16
%321 = load double, double* %320
%322 = fsub double %319, %321
%323 = fdiv double %317, %322
%324 = load double*, double** %14
%325 = load double, double* %324
%326 = load double*, double** %20
%327 = load double, double* %326
%328 = fsub double %325, %327
%329 = call double @llvm.fmuladd.f64(double %323, double %328, double %315)
store double %329, double* %37
%330 = load double, double* %35
%331 = load double*, double** %20
%332 = load double, double* %331
%333 = fsub double %330, %332
%334 = call double @llvm.fabs.f64(double %333)
%335 = load double, double* %37
%336 = load double*, double** %20
%337 = load double, double* %336
%338 = fsub double %335, %337
%339 = call double @llvm.fabs.f64(double %338)
%340 = fcmp ogt double %334, %339
br i1 %340, label %341, label %343
341: ; preds = %286
%342 = load double, double* %35
store double %342, double* %36
br label %345
343: ; preds = %286
%344 = load double, double* %37
store double %344, double* %36
br label %345
345: ; preds = %343, %341
%346 = load i32*, i32** %23
store i32 1, i32* %346
br label %618
347: ; preds = %225
%348 = load double*, double** %22
%349 = load double, double* %348
%350 = call double @llvm.fabs.f64(double %349)
%351 = load double*, double** %16
%352 = load double, double* %351
%353 = call double @llvm.fabs.f64(double %352)
%354 = fcmp olt double %350, %353
br i1 %354, label %355, label %514
355: ; preds = %347
store i32 3, i32* %26
store i32 1, i32* %27
%356 = load double*, double** %15
%357 = load double, double* %356
%358 = load double*, double** %21
%359 = load double, double* %358
%360 = fsub double %357, %359
%361 = fmul double 3.000000e+00, %360
%362 = load double*, double** %20
%363 = load double, double* %362
%364 = load double*, double** %14
%365 = load double, double* %364
%366 = fsub double %363, %365
%367 = fdiv double %361, %366
%368 = load double*, double** %16
%369 = load double, double* %368
%370 = fadd double %367, %369
%371 = load double*, double** %22
%372 = load double, double* %371
%373 = fadd double %370, %372
store double %373, double* %38
%374 = load double, double* %38
%375 = call double @llvm.fabs.f64(double %374)
%376 = load double*, double** %16
%377 = load double, double* %376
%378 = call double @llvm.fabs.f64(double %377)
%379 = call double @pmax(double %375, double %378)
store double %379, double* %33
%380 = load double, double* %33
%381 = load double*, double** %22
%382 = load double, double* %381
%383 = call double @llvm.fabs.f64(double %382)
%384 = call double @pmax(double %380, double %383)
store double %384, double* %33
%385 = load double, double* %33
%386 = load double, double* %38
%387 = load double, double* %33
%388 = fdiv double %386, %387
%389 = load double, double* %38
%390 = load double, double* %33
%391 = fdiv double %389, %390
%392 = load double*, double** %16
%393 = load double, double* %392
%394 = load double, double* %33
%395 = fdiv double %393, %394
%396 = load double*, double** %22
%397 = load double, double* %396
%398 = load double, double* %33
%399 = fdiv double %397, %398
%400 = fmul double %395, %399
%401 = fneg double %400
%402 = call double @llvm.fmuladd.f64(double %388, double %391, double %401)
%403 = call double @pmax(double 0.000000e+00, double %402)
%404 = call double @sqrt(double %403)
%405 = fmul double %385, %404
store double %405, double* %28
%406 = load double*, double** %20
%407 = load double, double* %406
%408 = load double*, double** %14
%409 = load double, double* %408
%410 = fcmp ogt double %407, %409
br i1 %410, label %411, label %414
411: ; preds = %355
%412 = load double, double* %28
%413 = fneg double %412
store double %413, double* %28
br label %414
414: ; preds = %411, %355
%415 = load double, double* %28
%416 = load double*, double** %22
%417 = load double, double* %416
%418 = fsub double %415, %417
%419 = load double, double* %38
%420 = fadd double %418, %419
store double %420, double* %29
%421 = load double, double* %28
%422 = load double*, double** %16
%423 = load double, double* %422
%424 = load double*, double** %22
%425 = load double, double* %424
%426 = fsub double %423, %425
%427 = fadd double %421, %426
%428 = load double, double* %28
%429 = fadd double %427, %428
store double %429, double* %31
%430 = load double, double* %29
%431 = load double, double* %31
%432 = fdiv double %430, %431
store double %432, double* %32
%433 = load double, double* %32
%434 = fcmp olt double %433, 0.000000e+00
br i1 %434, label %435, label %448
435: ; preds = %414
%436 = load double, double* %28
%437 = fcmp une double %436, 0.000000e+00
br i1 %437, label %438, label %448
438: ; preds = %435
%439 = load double*, double** %20
%440 = load double, double* %439
%441 = load double, double* %32
%442 = load double*, double** %14
%443 = load double, double* %442
%444 = load double*, double** %20
%445 = load double, double* %444
%446 = fsub double %443, %445
%447 = call double @llvm.fmuladd.f64(double %441, double %446, double %440)
store double %447, double* %35
br label %459
448: ; preds = %435, %414
%449 = load double*, double** %20
%450 = load double, double* %449
%451 = load double*, double** %14
%452 = load double, double* %451
%453 = fcmp ogt double %450, %452
br i1 %453, label %454, label %456
454: ; preds = %448
%455 = load double, double* %25
store double %455, double* %35
br label %458
456: ; preds = %448
%457 = load double, double* %24
store double %457, double* %35
br label %458
458: ; preds = %456, %454
br label %459
459: ; preds = %458, %438
%460 = load double*, double** %20
%461 = load double, double* %460
%462 = load double*, double** %22
%463 = load double, double* %462
%464 = load double*, double** %22
%465 = load double, double* %464
%466 = load double*, double** %16
%467 = load double, double* %466
%468 = fsub double %465, %467
%469 = fdiv double %463, %468
%470 = load double*, double** %14
%471 = load double, double* %470
%472 = load double*, double** %20
%473 = load double, double* %472
%474 = fsub double %471, %473
%475 = call double @llvm.fmuladd.f64(double %469, double %474, double %461)
store double %475, double* %37
%476 = load i32*, i32** %23
%477 = load i32, i32* %476
%478 = icmp eq i32 %477, 1
br i1 %478, label %479, label %496
479: ; preds = %459
%480 = load double*, double** %20
%481 = load double, double* %480
%482 = load double, double* %35
%483 = fsub double %481, %482
%484 = call double @llvm.fabs.f64(double %483)
%485 = load double*, double** %20
%486 = load double, double* %485
%487 = load double, double* %37
%488 = fsub double %486, %487
%489 = call double @llvm.fabs.f64(double %488)
%490 = fcmp olt double %484, %489
br i1 %490, label %491, label %493
491: ; preds = %479
%492 = load double, double* %35
store double %492, double* %36
br label %495
493: ; preds = %479
%494 = load double, double* %37
store double %494, double* %36
br label %495
495: ; preds = %493, %491
br label %513
496: ; preds = %459
%497 = load double*, double** %20
%498 = load double, double* %497
%499 = load double, double* %35
%500 = fsub double %498, %499
%501 = call double @llvm.fabs.f64(double %500)
%502 = load double*, double** %20
%503 = load double, double* %502
%504 = load double, double* %37
%505 = fsub double %503, %504
%506 = call double @llvm.fabs.f64(double %505)
%507 = fcmp ogt double %501, %506
br i1 %507, label %508, label %510
508: ; preds = %496
%509 = load double, double* %35
store double %509, double* %36
br label %512
510: ; preds = %496
%511 = load double, double* %37
store double %511, double* %36
br label %512
512: ; preds = %510, %508
br label %513
513: ; preds = %512, %495
br label %617
514: ; preds = %347
store i32 4, i32* %26
store i32 0, i32* %27
%515 = load i32*, i32** %23
%516 = load i32, i32* %515
%517 = icmp eq i32 %516, 1
br i1 %517, label %518, label %605
518: ; preds = %514
%519 = load double*, double** %21
%520 = load double, double* %519
%521 = load double*, double** %18
%522 = load double, double* %521
%523 = fsub double %520, %522
%524 = fmul double 3.000000e+00, %523
%525 = load double*, double** %17
%526 = load double, double* %525
%527 = load double*, double** %20
%528 = load double, double* %527
%529 = fsub double %526, %528
%530 = fdiv double %524, %529
%531 = load double*, double** %19
%532 = load double, double* %531
%533 = fadd double %530, %532
%534 = load double*, double** %22
%535 = load double, double* %534
%536 = fadd double %533, %535
store double %536, double* %38
%537 = load double, double* %38
%538 = call double @llvm.fabs.f64(double %537)
%539 = load double*, double** %19
%540 = load double, double* %539
%541 = call double @llvm.fabs.f64(double %540)
%542 = call double @pmax(double %538, double %541)
store double %542, double* %33
%543 = load double, double* %33
%544 = load double*, double** %22
%545 = load double, double* %544
%546 = call double @llvm.fabs.f64(double %545)
%547 = call double @pmax(double %543, double %546)
store double %547, double* %33
%548 = load double, double* %33
%549 = load double, double* %38
%550 = load double, double* %33
%551 = fdiv double %549, %550
%552 = load double, double* %38
%553 = load double, double* %33
%554 = fdiv double %552, %553
%555 = load double*, double** %19
%556 = load double, double* %555
%557 = load double, double* %33
%558 = fdiv double %556, %557
%559 = load double*, double** %22
%560 = load double, double* %559
%561 = load double, double* %33
%562 = fdiv double %560, %561
%563 = fmul double %558, %562
%564 = fneg double %563
%565 = call double @llvm.fmuladd.f64(double %551, double %554, double %564)
%566 = call double @sqrt(double %565)
%567 = fmul double %548, %566
store double %567, double* %28
%568 = load double*, double** %20
%569 = load double, double* %568
%570 = load double*, double** %17
%571 = load double, double* %570
%572 = fcmp ogt double %569, %571
br i1 %572, label %573, label %576
573: ; preds = %518
%574 = load double, double* %28
%575 = fneg double %574
store double %575, double* %28
br label %576
576: ; preds = %573, %518
%577 = load double, double* %28
%578 = load double*, double** %22
%579 = load double, double* %578
%580 = fsub double %577, %579
%581 = load double, double* %38
%582 = fadd double %580, %581
store double %582, double* %29
%583 = load double, double* %28
%584 = load double*, double** %22
%585 = load double, double* %584
%586 = fsub double %583, %585
%587 = load double, double* %28
%588 = fadd double %586, %587
%589 = load double*, double** %19
%590 = load double, double* %589
%591 = fadd double %588, %590
store double %591, double* %31
%592 = load double, double* %29
%593 = load double, double* %31
%594 = fdiv double %592, %593
store double %594, double* %32
%595 = load double*, double** %20
%596 = load double, double* %595
%597 = load double, double* %32
%598 = load double*, double** %17
%599 = load double, double* %598
%600 = load double*, double** %20
%601 = load double, double* %600
%602 = fsub double %599, %601
%603 = call double @llvm.fmuladd.f64(double %597, double %602, double %596)
store double %603, double* %35
%604 = load double, double* %35
store double %604, double* %36
br label %616
605: ; preds = %514
%606 = load double*, double** %20
%607 = load double, double* %606
%608 = load double*, double** %14
%609 = load double, double* %608
%610 = fcmp ogt double %607, %609
br i1 %610, label %611, label %613
611: ; preds = %605
%612 = load double, double* %25
store double %612, double* %36
br label %615
613: ; preds = %605
%614 = load double, double* %24
store double %614, double* %36
br label %615
615: ; preds = %613, %611
br label %616
616: ; preds = %615, %576
br label %617
617: ; preds = %616, %513
br label %618
618: ; preds = %617, %345
br label %619
619: ; preds = %618, %223
%620 = load double*, double** %21
%621 = load double, double* %620
%622 = load double*, double** %15
%623 = load double, double* %622
%624 = fcmp ogt double %621, %623
br i1 %624, label %625, label %635
625: ; preds = %619
%626 = load double*, double** %20
%627 = load double, double* %626
%628 = load double*, double** %17
store double %627, double* %628
%629 = load double*, double** %21
%630 = load double, double* %629
%631 = load double*, double** %18
store double %630, double* %631
%632 = load double*, double** %22
%633 = load double, double* %632
%634 = load double*, double** %19
store double %633, double* %634
br label %658
635: ; preds = %619
%636 = load double, double* %34
%637 = fcmp olt double %636, 0.000000e+00
br i1 %637, label %638, label %648
638: ; preds = %635
%639 = load double*, double** %14
%640 = load double, double* %639
%641 = load double*, double** %17
store double %640, double* %641
%642 = load double*, double** %15
%643 = load double, double* %642
%644 = load double*, double** %18
store double %643, double* %644
%645 = load double*, double** %16
%646 = load double, double* %645
%647 = load double*, double** %19
store double %646, double* %647
br label %648
648: ; preds = %638, %635
%649 = load double*, double** %20
%650 = load double, double* %649
%651 = load double*, double** %14
store double %650, double* %651
%652 = load double*, double** %21
%653 = load double, double* %652
%654 = load double*, double** %15
store double %653, double* %654
%655 = load double*, double** %22
%656 = load double, double* %655
%657 = load double*, double** %16
store double %656, double* %657
br label %658
658: ; preds = %648, %625
%659 = load double, double* %25
%660 = load double, double* %36
%661 = call double @pmin(double %659, double %660)
store double %661, double* %36
%662 = load double, double* %24
%663 = load double, double* %36
%664 = call double @pmax(double %662, double %663)
store double %664, double* %36
%665 = load double, double* %36
%666 = load double*, double** %20
store double %665, double* %666
%667 = load i32*, i32** %23
%668 = load i32, i32* %667
%669 = icmp eq i32 %668, 1
br i1 %669, label %670, label %708
670: ; preds = %658
%671 = load i32, i32* %27
%672 = icmp eq i32 %671, 1
br i1 %672, label %673, label %708
673: ; preds = %670
%674 = load double*, double** %17
%675 = load double, double* %674
%676 = load double*, double** %14
%677 = load double, double* %676
%678 = fcmp ogt double %675, %677
br i1 %678, label %679, label %693
679: ; preds = %673
%680 = load double*, double** %14
%681 = load double, double* %680
%682 = load double, double* %30
%683 = load double*, double** %17
%684 = load double, double* %683
%685 = load double*, double** %14
%686 = load double, double* %685
%687 = fsub double %684, %686
%688 = call double @llvm.fmuladd.f64(double %682, double %687, double %681)
%689 = load double*, double** %20
%690 = load double, double* %689
%691 = call double @pmin(double %688, double %690)
%692 = load double*, double** %20
store double %691, double* %692
br label %707
693: ; preds = %673
%694 = load double*, double** %14
%695 = load double, double* %694
%696 = load double, double* %30
%697 = load double*, double** %17
%698 = load double, double* %697
%699 = load double*, double** %14
%700 = load double, double* %699
%701 = fsub double %698, %700
%702 = call double @llvm.fmuladd.f64(double %696, double %701, double %695)
%703 = load double*, double** %20
%704 = load double, double* %703
%705 = call double @pmax(double %702, double %704)
%706 = load double*, double** %20
store double %705, double* %706
br label %707
707: ; preds = %693, %679
br label %708
708: ; preds = %707, %670, %658
%709 = load i32, i32* %26
store i32 %709, i32* %13
br label %710
710: ; preds = %708, %74
%711 = load i32, i32* %13
ret i32 %711
}

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