#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 */
float FLT_EPSILON;
float atan(float);
float cos(float);
float fabs(float);
float pow(float, int);
float sin(float);
float sqrt(float);
int solve_cubic(float a, float b, float c, float d, float *xout) {
  static const float cos120 = -0.5f;
  static const float sin120 = 0.866025404f;
  int n = 0;
  if (fabs(d) < FLT_EPSILON) {
    *xout = 0.0f;
    ++n;
    ++xout;
    d = c;
    c = b;
    b = a;
    a = 0.0f;
  }
  if (fabs(a) < FLT_EPSILON) {
    if (fabs(b) < FLT_EPSILON) {
      if (fabs(c) > FLT_EPSILON) {
        *xout = -d / c;
        n += 1;
      }
    } else {
      float yy = c * c - 4 * b * d;
      if (yy >= 0) {
        float inv2b = 1 / (2 * b);
        float y = sqrt(yy);
        xout[0] = (-c + y) * inv2b;
        xout[1] = (-c - y) * inv2b;
        n += 2;
      }
    }
  } else {
    float inva = 1 / a;
    float invaa = inva * inva;
    float bb = b * b;
    float bover3a = b * (1 / 3.0f) * inva;
    float p = (3 * a * c - bb) * (1 / 3.0f) * invaa;
    float halfq = (2 * bb * b - 9 * a * b * c + 27 * a * a * d) * (0.5f / 27) *
                  invaa * inva;
    float yy = p * p * p / 27 + halfq * halfq;
    if (yy > FLT_EPSILON) {
      float y = sqrt(yy);
      float uuu = -halfq + y;
      float vvv = -halfq - y;
      float www = fabs(uuu) > fabs(vvv) ? uuu : vvv;
      float w = (www < 0) ? -pow(fabs(www), 1 / 3.0f) : pow(www, 1 / 3.0f);
      *xout = w - p / (3 * w) - bover3a;
      n = 1;
    } else if (yy < -FLT_EPSILON) {
      float x = -halfq;
      float y = sqrt(-yy);
      float theta;
      float r;
      float ux;
      float uyi;
      if (fabs(x) > FLT_EPSILON) {
        theta = (x > 0) ? atan(y / x) : (atan(y / x) + 3.14159625f);
        r = sqrt(x * x - yy);
      } else {
        theta = 3.14159625f / 2;
        r = y;
      }
      theta /= 3.0f;
      r = pow(r, 1 / 3.0f);
      ux = cos(theta) * r;
      uyi = sin(theta) * r;
      xout[0] = ux + ux - bover3a;
      xout[1] = 2 * (ux * cos120 - uyi * sin120) - bover3a;
      xout[2] = 2 * (ux * cos120 + uyi * sin120) - bover3a;
      n = 3;
    } else {
      float www = -halfq;
      float w = (www < 0) ? -pow(fabs(www), 1 / 3.0f) : pow(www, 1 / 3.0f);
      xout[0] = w + w - bover3a;
      xout[1] = 2 * w * cos120 - bover3a;
      n = 2;
    }
  }
  return n;
}


x86 assembly (clang, -O0):
<solve_cubic>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movss  -0x10(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
mov    0x2e42(%rip),%rax
movss  (%rax),%xmm0
ucomiss %xmm1,%xmm0
jbe    11f1 <solve_cubic+0x91>
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
mov    0x2ddb(%rip),%rax
movss  (%rax),%xmm0
ucomiss %xmm1,%xmm0
jbe    134a <solve_cubic+0x1ea>
movss  -0x8(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
mov    0x2dba(%rip),%rax
movss  (%rax),%xmm0
ucomiss %xmm1,%xmm0
jbe    127a <solve_cubic+0x11a>
movss  -0xc(%rbp),%xmm0
call   1030 <fabs@plt>
mov    0x2d9c(%rip),%rax
ucomiss (%rax),%xmm0
jbe    1275 <solve_cubic+0x115>
movss  -0x10(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
divss  -0xc(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1345 <solve_cubic+0x1e5>
movss  -0xc(%rbp),%xmm0
movss  -0xc(%rbp),%xmm2
movss  0xda0(%rip),%xmm1
mulss  -0x8(%rbp),%xmm1
mulss  -0x10(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     1340 <solve_cubic+0x1e0>
movss  0xd43(%rip),%xmm1
mulss  -0x8(%rbp),%xmm1
movss  0xd42(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x20(%rbp),%xmm0
call   1080 <sqrt@plt>
movss  %xmm0,-0x28(%rbp)
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
addss  -0x28(%rbp),%xmm0
mulss  -0x24(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
subss  -0x28(%rbp),%xmm0
mulss  -0x24(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x4(%rax)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1345 <solve_cubic+0x1e5>
jmp    18aa <solve_cubic+0x74a>
movss  0xcc6(%rip),%xmm0
divss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x8(%rbp),%xmm0
mulss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  0xc8e(%rip),%xmm0
mulss  -0x8(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  0xc7b(%rip),%xmm0
mulss  -0x4(%rbp),%xmm0
movss  -0xc(%rbp),%xmm2
movss  -0x34(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  0xc4b(%rip),%xmm1
mulss  %xmm1,%xmm0
mulss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  0xc31(%rip),%xmm1
mulss  -0x34(%rbp),%xmm1
movss  -0x8(%rbp),%xmm2
movss  0xc1b(%rip),%xmm0
mulss  -0x4(%rbp),%xmm0
mulss  -0x8(%rbp),%xmm0
mulss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  0xbe7(%rip),%xmm0
mulss  -0x4(%rbp),%xmm0
mulss  -0x4(%rbp),%xmm0
movss  -0x10(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  0xbcc(%rip),%xmm1
mulss  %xmm1,%xmm0
mulss  -0x30(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x3c(%rbp),%xmm1
mulss  -0x3c(%rbp),%xmm1
mulss  -0x3c(%rbp),%xmm1
movss  0xb9e(%rip),%xmm0
divss  %xmm0,%xmm1
movss  -0x40(%rbp),%xmm0
movss  -0x40(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
mov    0x2b57(%rip),%rax
ucomiss (%rax),%xmm0
jbe    15b7 <solve_cubic+0x457>
movss  -0x44(%rbp),%xmm0
call   1080 <sqrt@plt>
movss  %xmm0,-0x48(%rbp)
movss  -0x40(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
addss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x40(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
subss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x4c(%rbp),%xmm0
call   1030 <fabs@plt>
movss  %xmm0,-0x7c(%rbp)
movss  -0x50(%rbp),%xmm0
call   1030 <fabs@plt>
movaps %xmm0,%xmm1
movss  -0x7c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1512 <solve_cubic+0x3b2>
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x80(%rbp)
jmp    151c <solve_cubic+0x3bc>
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x80(%rbp)
movss  -0x80(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x54(%rbp),%xmm0
jbe    155e <solve_cubic+0x3fe>
movss  -0x54(%rbp),%xmm0
call   1030 <fabs@plt>
xor    %edi,%edi
call   1070 <pow@plt>
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x84(%rbp)
ff
jmp    1572 <solve_cubic+0x412>
movss  -0x54(%rbp),%xmm0
xor    %edi,%edi
call   1070 <pow@plt>
movss  %xmm0,-0x84(%rbp)
ff
movss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%rbp),%xmm0
movss  -0x3c(%rbp),%xmm1
movss  0xa83(%rip),%xmm2
mulss  -0x58(%rbp),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
subss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movl   $0x1,-0x1c(%rbp)
jmp    18a5 <solve_cubic+0x745>
movss  -0x44(%rbp),%xmm1
mov    0x2a1d(%rip),%rax
movss  (%rax),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
ucomiss %xmm1,%xmm0
jbe    17da <solve_cubic+0x67a>
movss  -0x40(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x44(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
call   1080 <sqrt@plt>
movss  %xmm0,-0x60(%rbp)
movss  -0x5c(%rbp),%xmm0
call   1030 <fabs@plt>
mov    0x29bf(%rip),%rax
ucomiss (%rax),%xmm0
jbe    16ba <solve_cubic+0x55a>
movss  -0x5c(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1657 <solve_cubic+0x4f7>
movss  -0x60(%rbp),%xmm0
divss  -0x5c(%rbp),%xmm0
call   1050 <atan@plt>
movss  %xmm0,-0x88(%rbp)
ff
jmp    167a <solve_cubic+0x51a>
movss  -0x60(%rbp),%xmm0
divss  -0x5c(%rbp),%xmm0
call   1050 <atan@plt>
movss  0x9b6(%rip),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  -0x88(%rbp),%xmm0
ff
movss  %xmm0,-0x64(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  -0x5c(%rbp),%xmm2
movss  -0x44(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   1080 <sqrt@plt>
movss  %xmm0,-0x68(%rbp)
jmp    16d1 <solve_cubic+0x571>
movss  0x95e(%rip),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x64(%rbp),%xmm0
movss  0x936(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x68(%rbp),%xmm0
xor    %edi,%edi
call   1070 <pow@plt>
movss  %xmm0,-0x68(%rbp)
movss  -0x64(%rbp),%xmm0
call   1060 <cos@plt>
mulss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x64(%rbp),%xmm0
call   1040 <sin@plt>
mulss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x6c(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
subss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x6c(%rbp),%xmm0
movss  0x8e4(%rip),%xmm1
mulss  -0x70(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
movss  0x8be(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x38(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x6c(%rbp),%xmm0
movss  0x892(%rip),%xmm1
mulss  -0x70(%rbp),%xmm1
movss  0x879(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x38(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x8(%rax)
movl   $0x3,-0x1c(%rbp)
jmp    18a0 <solve_cubic+0x740>
movss  -0x40(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x74(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x74(%rbp),%xmm0
jbe    1829 <solve_cubic+0x6c9>
movss  -0x74(%rbp),%xmm0
call   1030 <fabs@plt>
xor    %edi,%edi
call   1070 <pow@plt>
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
jmp    183d <solve_cubic+0x6dd>
movss  -0x74(%rbp),%xmm0
xor    %edi,%edi
call   1070 <pow@plt>
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x8c(%rbp),%xmm0
ff
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
addss  -0x78(%rbp),%xmm0
subss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movss  0x7a3(%rip),%xmm0
mulss  -0x78(%rbp),%xmm0
movss  -0x38(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
movss  0x794(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x4(%rax)
movl   $0x2,-0x1c(%rbp)
jmp    18a5 <solve_cubic+0x745>
jmp    18aa <solve_cubic+0x74a>
mov    -0x1c(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<solve_cubic>:
push   %rbp
push   %r14
push   %rbx
sub    $0x50,%rsp
mov    %rdi,%rbx
movaps 0xe9e(%rip),%xmm4
andps  %xmm3,%xmm4
mov    0x2e74(%rip),%r14
movss  (%r14),%xmm10
xor    %ebp,%ebp
ucomiss %xmm4,%xmm10
jbe    1199 <solve_cubic+0x49>
movl   $0x0,(%rbx)
add    $0x4,%rbx
movss  (%r14),%xmm10
mov    $0x1,%ebp
movaps %xmm2,%xmm3
movaps %xmm1,%xmm2
movaps %xmm0,%xmm1
xorps  %xmm0,%xmm0
movaps 0xe60(%rip),%xmm4
andps  %xmm0,%xmm4
ucomiss %xmm4,%xmm10
jbe    11e8 <solve_cubic+0x98>
movaps 0xe50(%rip),%xmm0
andps  %xmm1,%xmm0
ucomiss %xmm0,%xmm10
jbe    12c4 <solve_cubic+0x174>
movaps 0xe3c(%rip),%xmm0
andps  %xmm2,%xmm0
ucomiss %xmm10,%xmm0
jbe    15a9 <solve_cubic+0x459>
xorps  0xe38(%rip),%xmm3
divss  %xmm2,%xmm3
movss  %xmm3,(%rbx)
add    $0x1,%ebp
jmp    15a9 <solve_cubic+0x459>
movss  0xe30(%rip),%xmm4
divss  %xmm0,%xmm4
movaps %xmm4,%xmm9
mulss  %xmm4,%xmm9
movaps %xmm1,%xmm6
mulss  %xmm1,%xmm6
movss  0xe18(%rip),%xmm7
movaps %xmm1,%xmm8
mulss  %xmm7,%xmm8
mulss  %xmm4,%xmm8
movss  0xe06(%rip),%xmm5
mulss  %xmm0,%xmm5
mulss  %xmm2,%xmm5
subss  %xmm6,%xmm5
mulss  %xmm7,%xmm5
mulss  %xmm9,%xmm5
addss  %xmm6,%xmm6
movss  0xde9(%rip),%xmm7
mulss  %xmm0,%xmm7
mulss  %xmm1,%xmm7
mulss  %xmm2,%xmm7
mulss  %xmm1,%xmm6
addss  %xmm7,%xmm6
movss  0xdd1(%rip),%xmm1
movaps %xmm0,%xmm7
mulss  %xmm1,%xmm7
mulss  %xmm0,%xmm7
mulss  %xmm3,%xmm7
addss  %xmm6,%xmm7
mulss  0xdba(%rip),%xmm7
mulss  %xmm9,%xmm7
mulss  %xmm4,%xmm7
movaps %xmm5,%xmm0
mulss  %xmm5,%xmm0
mulss  %xmm5,%xmm0
divss  %xmm1,%xmm0
movaps %xmm7,%xmm2
mulss  %xmm7,%xmm2
addss  %xmm2,%xmm0
ucomiss %xmm10,%xmm0
movaps %xmm8,0x20(%rsp)
jbe    130d <solve_cubic+0x1bd>
xorps  %xmm3,%xmm3
ucomiss %xmm3,%xmm0
movss  %xmm5,0x10(%rsp)
jb     135a <solve_cubic+0x20a>
sqrtss %xmm0,%xmm0
jmp    136a <solve_cubic+0x21a>
movss  0xd84(%rip),%xmm0
mulss  %xmm1,%xmm0
mulss  %xmm0,%xmm3
movaps %xmm2,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm3,%xmm0
xorps  %xmm3,%xmm3
ucomiss %xmm3,%xmm0
jb     15a9 <solve_cubic+0x459>
addss  %xmm1,%xmm1
movss  0xd29(%rip),%xmm4
divss  %xmm1,%xmm4
ucomiss %xmm3,%xmm0
jb     1422 <solve_cubic+0x2d2>
sqrtss %xmm0,%xmm0
jmp    143b <solve_cubic+0x2eb>
movaps 0xcfc(%rip),%xmm3
xorps  %xmm3,%xmm10
ucomiss %xmm0,%xmm10
xorps  %xmm7,%xmm3
jbe    13bc <solve_cubic+0x26c>
movaps 0xce4(%rip),%xmm4
xorps  %xmm0,%xmm4
movss  0xd05(%rip),%xmm1
ucomiss %xmm0,%xmm1
movaps %xmm7,(%rsp)
movaps %xmm2,0x30(%rsp)
movaps %xmm4,0x10(%rsp)
jb     1466 <solve_cubic+0x316>
xorps  %xmm0,%xmm0
sqrtss %xmm4,%xmm0
jmp    1478 <solve_cubic+0x328>
movaps %xmm7,(%rsp)
call   1070 <sqrt@plt>
xorps  %xmm3,%xmm3
movaps (%rsp),%xmm7
movaps %xmm0,%xmm1
subss  %xmm7,%xmm1
xorps  0xc98(%rip),%xmm7
subss  %xmm0,%xmm7
movaps 0xc7d(%rip),%xmm0
movaps %xmm1,%xmm2
andps  %xmm0,%xmm2
andps  %xmm7,%xmm0
cmpltss %xmm2,%xmm0
andps  %xmm0,%xmm1
andnps %xmm7,%xmm0
orps   %xmm1,%xmm0
ucomiss %xmm0,%xmm3
jbe    13ea <solve_cubic+0x29a>
movaps 0xc5a(%rip),%xmm1
andps  %xmm0,%xmm1
movaps %xmm1,%xmm0
xor    %edi,%edi
call   1060 <pow@plt>
xorps  0xc56(%rip),%xmm0
jmp    13f1 <solve_cubic+0x2a1>
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm7
jbe    14c8 <solve_cubic+0x378>
movaps 0xc31(%rip),%xmm0
andps  %xmm3,%xmm0
xor    %edi,%edi
call   1060 <pow@plt>
movaps 0x20(%rsp),%xmm2
xorps  0xc2b(%rip),%xmm0
jmp    14d7 <solve_cubic+0x387>
xor    %edi,%edi
call   1060 <pow@plt>
movaps 0x20(%rsp),%xmm2
movss  0x10(%rsp),%xmm3
movss  0xc48(%rip),%xmm1
mulss  %xmm0,%xmm1
divss  %xmm1,%xmm3
addss  %xmm0,%xmm3
subss  %xmm2,%xmm3
movss  %xmm3,(%rbx)
mov    $0x1,%ebp
jmp    15a9 <solve_cubic+0x459>
movaps %xmm2,0x20(%rsp)
movss  %xmm4,(%rsp)
call   1070 <sqrt@plt>
movss  (%rsp),%xmm4
movaps 0x20(%rsp),%xmm2
movaps %xmm0,%xmm1
subss  %xmm2,%xmm1
xorps  0xbc7(%rip),%xmm2
mulss  %xmm4,%xmm1
movss  %xmm1,(%rbx)
subss  %xmm0,%xmm2
mulss  %xmm4,%xmm2
movss  %xmm2,0x4(%rbx)
or     $0x2,%ebp
jmp    15a9 <solve_cubic+0x459>
movaps %xmm4,%xmm0
movaps %xmm3,0x40(%rsp)
call   1070 <sqrt@plt>
movaps 0x40(%rsp),%xmm3
movaps 0xb81(%rip),%xmm1
andps  %xmm3,%xmm1
ucomiss (%r14),%xmm1
jbe    1501 <solve_cubic+0x3b1>
divss  %xmm3,%xmm0
call   1040 <atan@plt>
movss  0xbab(%rip),%xmm1
addss  %xmm0,%xmm1
xorps  %xmm2,%xmm2
movaps (%rsp),%xmm3
cmpltss %xmm2,%xmm3
andps  %xmm3,%xmm0
andnps %xmm1,%xmm3
orps   %xmm0,%xmm3
movaps 0x30(%rsp),%xmm0
addss  0x10(%rsp),%xmm0
ucomiss %xmm2,%xmm0
jb     150b <solve_cubic+0x3bb>
sqrtss %xmm0,%xmm0
jmp    1518 <solve_cubic+0x3c8>
movaps %xmm3,%xmm0
xor    %edi,%edi
call   1060 <pow@plt>
movaps 0x20(%rsp),%xmm2
addss  %xmm0,%xmm0
movaps %xmm0,%xmm1
subss  %xmm2,%xmm1
mulss  0xb4e(%rip),%xmm0
movss  %xmm1,(%rbx)
subss  %xmm2,%xmm0
movss  %xmm0,0x4(%rbx)
mov    $0x2,%ebp
jmp    15a9 <solve_cubic+0x459>
movss  0xb37(%rip),%xmm3
jmp    1518 <solve_cubic+0x3c8>
movaps %xmm3,(%rsp)
call   1070 <sqrt@plt>
movaps (%rsp),%xmm3
divss  0xb08(%rip),%xmm3
movaps %xmm3,(%rsp)
xor    %edi,%edi
call   1060 <pow@plt>
movss  %xmm0,0x10(%rsp)
movaps (%rsp),%xmm0
call   1050 <cos@plt>
mulss  0x10(%rsp),%xmm0
movss  %xmm0,0x30(%rsp)
movaps (%rsp),%xmm0
call   1030 <sin@plt>
mulss  0x10(%rsp),%xmm0
movss  0x30(%rsp),%xmm3
movaps %xmm3,%xmm1
addss  %xmm3,%xmm1
movaps 0x20(%rsp),%xmm2
subss  %xmm2,%xmm1
mulss  0xad5(%rip),%xmm0
movss  %xmm1,(%rbx)
mulss  0xab9(%rip),%xmm3
movaps %xmm3,%xmm1
subss  %xmm0,%xmm1
addss  %xmm1,%xmm1
subss  %xmm2,%xmm1
movss  %xmm1,0x4(%rbx)
addss  %xmm0,%xmm3
addss  %xmm3,%xmm3
subss  %xmm2,%xmm3
movss  %xmm3,0x8(%rbx)
mov    $0x3,%ebp
mov    %ebp,%eax
add    $0x50,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

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

LLVM IR (-O2):
@FLT_EPSILON = global float 0.000000e+00
define i32 @solve_cubic(float %0, float %1, float %2, float %3, float* nocapture writeonly %4) {
%6 = tail call float @llvm.fabs.f32(float %3)
%7 = load float, float* @FLT_EPSILON
%8 = fcmp olt float %6, %7
br i1 %8, label %9, label %12
9: ; preds = %5
store float 0.000000e+00, float* %4
%10 = getelementptr inbounds float, float* %4, i64 1
%11 = load float, float* @FLT_EPSILON
br label %12
12: ; preds = %9, %5
%13 = phi float [ %11, %9 ], [ %7, %5 ]
%14 = phi i32 [ 1, %9 ], [ 0, %5 ]
%15 = phi float* [ %10, %9 ], [ %4, %5 ]
%16 = phi float [ %2, %9 ], [ %3, %5 ]
%17 = phi float [ %1, %9 ], [ %2, %5 ]
%18 = phi float [ %0, %9 ], [ %1, %5 ]
%19 = phi float [ 0.000000e+00, %9 ], [ %0, %5 ]
%20 = tail call float @llvm.fabs.f32(float %19)
%21 = fcmp olt float %20, %13
br i1 %21, label %22, label %48
22: ; preds = %12
%23 = tail call float @llvm.fabs.f32(float %18)
%24 = fcmp olt float %23, %13
br i1 %24, label %25, label %32
25: ; preds = %22
%26 = tail call float @llvm.fabs.f32(float %17)
%27 = fcmp ogt float %26, %13
br i1 %27, label %28, label %151
28: ; preds = %25
%29 = fneg float %16
%30 = fdiv float %29, %17
store float %30, float* %15
%31 = add nuw nsw i32 %14, 1
br label %151
32: ; preds = %22
%33 = fmul float %18, -4.000000e+00
%34 = fmul float %16, %33
%35 = tail call float @llvm.fmuladd.f32(float %17, float %17, float %34)
%36 = fcmp ult float %35, 0.000000e+00
br i1 %36, label %151, label %37
37: ; preds = %32
%38 = fmul float %18, 2.000000e+00
%39 = fdiv float 1.000000e+00, %38
%40 = tail call float @sqrt(float %35)
%41 = fneg float %17
%42 = fsub float %40, %17
%43 = fmul float %39, %42
store float %43, float* %15
%44 = fsub float %41, %40
%45 = fmul float %39, %44
%46 = getelementptr inbounds float, float* %15, i64 1
store float %45, float* %46
%47 = or i32 %14, 2
br label %151
48: ; preds = %12
%49 = fdiv float 1.000000e+00, %19
%50 = fmul float %49, %49
%51 = fmul float %18, %18
%52 = fmul float %18, 0x3FD5555560000000
%53 = fmul float %52, %49
%54 = fmul float %19, 3.000000e+00
%55 = fneg float %51
%56 = tail call float @llvm.fmuladd.f32(float %54, float %17, float %55)
%57 = fmul float %56, 0x3FD5555560000000
%58 = fmul float %50, %57
%59 = fmul float %51, 2.000000e+00
%60 = fmul float %19, -9.000000e+00
%61 = fmul float %18, %60
%62 = fmul float %17, %61
%63 = tail call float @llvm.fmuladd.f32(float %59, float %18, float %62)
%64 = fmul float %19, 2.700000e+01
%65 = fmul float %19, %64
%66 = tail call float @llvm.fmuladd.f32(float %65, float %16, float %63)
%67 = fmul float %66, 0x3F92F684C0000000
%68 = fmul float %50, %67
%69 = fmul float %49, %68
%70 = fmul float %58, %58
%71 = fmul float %58, %70
%72 = fdiv float %71, 2.700000e+01
%73 = tail call float @llvm.fmuladd.f32(float %69, float %69, float %72)
%74 = fcmp ogt float %73, %13
br i1 %74, label %75, label %97
75: ; preds = %48
%76 = tail call float @sqrt(float %73)
%77 = fneg float %69
%78 = fsub float %76, %69
%79 = fsub float %77, %76
%80 = tail call float @llvm.fabs.f32(float %78)
%81 = tail call float @llvm.fabs.f32(float %79)
%82 = fcmp ogt float %80, %81
%83 = select i1 %82, float %78, float %79
%84 = fcmp olt float %83, 0.000000e+00
br i1 %84, label %85, label %89
85: ; preds = %75
%86 = tail call float @llvm.fabs.f32(float %83)
%87 = tail call float @pow(float %86, i32 0)
%88 = fneg float %87
br label %91
89: ; preds = %75
%90 = tail call float @pow(float %83, i32 0)
br label %91
91: ; preds = %89, %85
%92 = phi float [ %88, %85 ], [ %90, %89 ]
%93 = fmul float %92, 3.000000e+00
%94 = fdiv float %58, %93
%95 = fsub float %92, %94
%96 = fsub float %95, %53
store float %96, float* %15
br label %151
97: ; preds = %48
%98 = fneg float %13
%99 = fcmp olt float %73, %98
%100 = fneg float %69
br i1 %99, label %101, label %135
101: ; preds = %97
%102 = fneg float %73
%103 = tail call float @sqrt(float %102)
%104 = tail call float @llvm.fabs.f32(float %100)
%105 = load float, float* @FLT_EPSILON
%106 = fcmp ogt float %104, %105
br i1 %106, label %107, label %115
107: ; preds = %101
%108 = fcmp olt float %69, 0.000000e+00
%109 = fdiv float %103, %100
%110 = tail call float @atan(float %109)
%111 = fadd float %110, 0x400921FD40000000
%112 = select i1 %108, float %110, float %111
%113 = tail call float @llvm.fmuladd.f32(float %69, float %69, float %102)
%114 = tail call float @sqrt(float %113)
br label %115
115: ; preds = %101, %107
%116 = phi float [ %112, %107 ], [ 0x3FF921FD40000000, %101 ]
%117 = phi float [ %114, %107 ], [ %103, %101 ]
%118 = fdiv float %116, 3.000000e+00
%119 = tail call float @pow(float %117, i32 0)
%120 = tail call float @cos(float %118)
%121 = fmul float %119, %120
%122 = tail call float @sin(float %118)
%123 = fmul float %119, %122
%124 = fadd float %121, %121
%125 = fsub float %124, %53
store float %125, float* %15
%126 = fmul float %123, 0x3FEBB67AE0000000
%127 = fneg float %126
%128 = tail call float @llvm.fmuladd.f32(float %121, float -5.000000e-01, float %127)
%129 = fneg float %53
%130 = tail call float @llvm.fmuladd.f32(float %128, float 2.000000e+00, float %129)
%131 = getelementptr inbounds float, float* %15, i64 1
store float %130, float* %131
%132 = tail call float @llvm.fmuladd.f32(float %121, float -5.000000e-01, float %126)
%133 = tail call float @llvm.fmuladd.f32(float %132, float 2.000000e+00, float %129)
%134 = getelementptr inbounds float, float* %15, i64 2
store float %133, float* %134
br label %151
135: ; preds = %97
%136 = fcmp ogt float %69, 0.000000e+00
br i1 %136, label %137, label %141
137: ; preds = %135
%138 = tail call float @llvm.fabs.f32(float %100)
%139 = tail call float @pow(float %138, i32 0)
%140 = fneg float %139
br label %143
141: ; preds = %135
%142 = tail call float @pow(float %100, i32 0)
br label %143
143: ; preds = %141, %137
%144 = phi float [ %140, %137 ], [ %142, %141 ]
%145 = fadd float %144, %144
%146 = fsub float %145, %53
store float %146, float* %15
%147 = fmul float %144, 2.000000e+00
%148 = fneg float %53
%149 = tail call float @llvm.fmuladd.f32(float %147, float -5.000000e-01, float %148)
%150 = getelementptr inbounds float, float* %15, i64 1
store float %149, float* %150
br label %151
151: ; preds = %91, %143, %115, %32, %37, %28, %25
%152 = phi i32 [ %31, %28 ], [ %14, %25 ], [ %47, %37 ], [ %14, %32 ], [ 1, %91 ], [ 3, %115 ], [ 2, %143 ]
ret i32 %152
}