#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 const);
int /*<<< orphan*/ log(double);
double sqrt(int /*<<< orphan*/);
double ppnd16(const double p) {
  double x, y;
  const double q = p - 0.5;
  if (fabs(q) <= 0.425) {
    const double r = 0.180625 - q * q;
    x = 2.5090809287301226727e+3;
    x = x * r + 3.3430575583588128105e+4;
    x = x * r + 6.7265770927008700853e+4;
    x = x * r + 4.5921953931549871457e+4;
    x = x * r + 1.3731693765509461125e+4;
    x = x * r + 1.9715909503065514427e+3;
    x = x * r + 1.3314166789178437745e+2;
    x = x * r + 3.3871328727963666080;
    x *= q;
    y = 5.2264952788528545610e+3;
    y = y * r + 2.8729085735721942674e+4;
    y = y * r + 3.9307895800092710610e+4;
    y = y * r + 2.1213794301586595867e+4;
    y = y * r + 5.3941960214247511077e+3;
    y = y * r + 6.8718700749205790830e+2;
    y = y * r + 4.2313330701600911252e+1;
    y = y * r + 1.0;
  } else {
    double r = 1.0 - p;
    if (p < r)
      r = p;
    r = sqrt(-log(r));
    if (r <= 5.0) {
      r -= 1.6;
      x = 7.74545014278341407640e-4;
      x = x * r + 2.27238449892691845833e-2;
      x = x * r + 2.41780725177450611770e-1;
      x = x * r + 1.27045825245236838258;
      x = x * r + 3.64784832476320460504;
      x = x * r + 5.76949722146069140550;
      x = x * r + 4.63033784615654529590;
      x = x * r + 1.42343711074968357734;
      y = 1.05075007164441684324e-9;
      y = y * r + 5.47593808499534494600e-4;
      y = y * r + 1.51986665636164571966e-2;
      y = y * r + 1.48103976427480074590e-1;
      y = y * r + 6.89767334985100004550e-1;
      y = y * r + 1.67638483018380384940;
      y = y * r + 2.05319162663775882187;
      y = y * r + 1.0;
    } else {
      r -= 5.0;
      x = 2.01033439929228813265e-7;
      x = x * r + 2.71155556874348757815e-5;
      x = x * r + 1.24266094738807843860e-3;
      x = x * r + 2.65321895265761230930e-2;
      x = x * r + 2.96560571828504891230e-1;
      x = x * r + 1.78482653991729133580;
      x = x * r + 5.46378491116411436990;
      x = x * r + 6.65790464350110377720;
      y = 2.04426310338993978564e-15;
      y = y * r + 1.42151175831644588870e-7;
      y = y * r + 1.84631831751005468180e-5;
      y = y * r + 7.86869131145613259100e-4;
      y = y * r + 1.48753612908506148525e-2;
      y = y * r + 1.36929880922735805310e-1;
      y = y * r + 5.99832206555887937690e-1;
      y = y * r + 1.0;
    }
    if (q < 0.0)
      x = -x;
  }
  return x / y;
}


x86 assembly (clang, -O0):
<ppnd16>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xece(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm1
movaps 0x1051(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xea5(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     137b <ppnd16+0x25b>
movsd  -0x20(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xffe(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xfe5(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xfc2(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf9b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf74(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf4d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf26(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xeff(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xed8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xeb0(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe8d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe66(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe3f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe18(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdca(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xca3(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    17d3 <ppnd16+0x6b3>
movsd  0xc8d(%rip),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13ab <ppnd16+0x28b>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <log@plt>
xor    %edi,%edi
sub    %eax,%edi
call   1040 <sqrt@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  0xc4d(%rip),%xmm0
ucomisd -0x30(%rbp),%xmm0
jb     15bd <ppnd16+0x49d>
movsd  -0x30(%rbp),%xmm0
movsd  0xd2d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xd14(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcf1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcca(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xca3(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc7c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc55(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc2e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc07(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xbee(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbcb(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xba4(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb7d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb56(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb2f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb08(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa61(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    179f <ppnd16+0x67f>
movsd  -0x30(%rbp),%xmm0
movsd  0xa4e(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xab5(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa92(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa6b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa44(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa1d(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9f6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9cf(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9a8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0x98f(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x96c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x945(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x91e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8f7(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8d0(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8a9(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x87a(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    17ce <ppnd16+0x6ae>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    17d3 <ppnd16+0x6b3>
movsd  -0x10(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ppnd16>:
sub    $0x18,%rsp
movsd  0xed4(%rip),%xmm3
addsd  %xmm0,%xmm3
movapd 0xf78(%rip),%xmm1
andpd  %xmm3,%xmm1
movsd  0xec4(%rip),%xmm2
ucomisd %xmm1,%xmm2
jae    11f0 <ppnd16+0xd0>
movapd %xmm3,(%rsp)
movsd  0xf35(%rip),%xmm1
subsd  %xmm0,%xmm1
minsd  %xmm1,%xmm0
call   1030 <log@plt>
neg    %eax
mov    %eax,%edi
call   1040 <sqrt@plt>
movsd  0xf1f(%rip),%xmm1
ucomisd %xmm0,%xmm1
jae    12c5 <ppnd16+0x1a5>
addsd  0xf1d(%rip),%xmm0
unpcklpd %xmm0,%xmm0
movapd 0xfa9(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xfad(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xfb1(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xfb5(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xfb9(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xfbd(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xfc1(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xfc5(%rip),%xmm1
jmp    132d <ppnd16+0x20d>
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movsd  0xe10(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xe0c(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe08(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe04(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe00(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xdfc(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xdf8(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xdf4(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xdf0(%rip),%xmm2
movsd  0xdf0(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xdec(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xde8(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xde4(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xde0(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xddc(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xdd8(%rip),%xmm1
mulsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm1
addsd  0xdd0(%rip),%xmm1
jmp    135f <ppnd16+0x23f>
addsd  0xdd3(%rip),%xmm0
unpcklpd %xmm0,%xmm0
movapd 0xde7(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdeb(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdef(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdf3(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdf7(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdfb(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdff(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xe03(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
movapd 0xe83(%rip),%xmm2
xorpd  %xmm0,%xmm2
xorpd  %xmm3,%xmm3
movapd (%rsp),%xmm4
cmpltsd %xmm3,%xmm4
movapd %xmm4,%xmm3
andpd  %xmm4,%xmm2
andnpd %xmm0,%xmm3
orpd   %xmm2,%xmm3
divsd  %xmm1,%xmm3
movapd %xmm3,%xmm0
add    $0x18,%rsp
ret

LLVM IR (-O0):
define double @ppnd16(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
store double %0, double* %2
%8 = load double, double* %2
%9 = fsub double %8, 5.000000e-01
store double %9, double* %5
%10 = load double, double* %5
%11 = call double @llvm.fabs.f64(double %10)
%12 = fcmp ole double %11, 4.250000e-01
br i1 %12, label %13, label %63
13: ; preds = %1
%14 = load double, double* %5
%15 = load double, double* %5
%16 = fneg double %14
%17 = call double @llvm.fmuladd.f64(double %16, double %15, double 1.806250e-01)
store double %17, double* %6
store double 0x40A39A296F7D925E, double* %3
%18 = load double, double* %3
%19 = load double, double* %6
%20 = call double @llvm.fmuladd.f64(double %18, double %19, double 0x40E052D26B2E45E4)
store double %20, double* %3
%21 = load double, double* %3
%22 = load double, double* %6
%23 = call double @llvm.fmuladd.f64(double %21, double %22, double 0x40F06C1C55B78F20)
store double %23, double* %3
%24 = load double, double* %3
%25 = load double, double* %6
%26 = call double @llvm.fmuladd.f64(double %24, double %25, double 0x40E66C3E869B752A)
store double %26, double* %3
%27 = load double, double* %3
%28 = load double, double* %6
%29 = call double @llvm.fmuladd.f64(double %27, double %28, double 0x40CAD1D8CD4EE71D)
store double %29, double* %3
%30 = load double, double* %3
%31 = load double, double* %6
%32 = call double @llvm.fmuladd.f64(double %30, double %31, double 0x409ECE5D2213C0CC)
store double %32, double* %3
%33 = load double, double* %3
%34 = load double, double* %6
%35 = call double @llvm.fmuladd.f64(double %33, double %34, double 0x4060A4888B1A436E)
store double %35, double* %3
%36 = load double, double* %3
%37 = load double, double* %6
%38 = call double @llvm.fmuladd.f64(double %36, double %37, double 0x400B18D91E9EEF75)
store double %38, double* %3
%39 = load double, double* %5
%40 = load double, double* %3
%41 = fmul double %40, %39
store double %41, double* %3
store double 0x40B46A7ECA984B69, double* %4
%42 = load double, double* %4
%43 = load double, double* %6
%44 = call double @llvm.fmuladd.f64(double %42, double %43, double 0x40DC0E457CB1AE76)
store double %44, double* %4
%45 = load double, double* %4
%46 = load double, double* %6
%47 = call double @llvm.fmuladd.f64(double %45, double %46, double 0x40E3317CAA64F4BE)
store double %47, double* %4
%48 = load double, double* %4
%49 = load double, double* %6
%50 = call double @llvm.fmuladd.f64(double %48, double %49, double 0x40D4B772D5D65266)
store double %50, double* %4
%51 = load double, double* %4
%52 = load double, double* %6
%53 = call double @llvm.fmuladd.f64(double %51, double %52, double 0x40B512322E75C89F)
store double %53, double* %4
%54 = load double, double* %4
%55 = load double, double* %6
%56 = call double @llvm.fmuladd.f64(double %54, double %55, double 0x4085797EFDC8B3F7)
store double %56, double* %4
%57 = load double, double* %4
%58 = load double, double* %6
%59 = call double @llvm.fmuladd.f64(double %57, double %58, double 0x4045281B386E1AB5)
store double %59, double* %4
%60 = load double, double* %4
%61 = load double, double* %6
%62 = call double @llvm.fmuladd.f64(double %60, double %61, double 1.000000e+00)
store double %62, double* %4
br label %175
63: ; preds = %1
%64 = load double, double* %2
%65 = fsub double 1.000000e+00, %64
store double %65, double* %7
%66 = load double, double* %2
%67 = load double, double* %7
%68 = fcmp olt double %66, %67
br i1 %68, label %69, label %71
69: ; preds = %63
%70 = load double, double* %2
store double %70, double* %7
br label %71
71: ; preds = %69, %63
%72 = load double, double* %7
%73 = call i32 @log(double %72)
%74 = sub nsw i32 0, %73
%75 = call double @sqrt(i32 %74)
store double %75, double* %7
%76 = load double, double* %7
%77 = fcmp ole double %76, 5.000000e+00
br i1 %77, label %78, label %123
78: ; preds = %71
%79 = load double, double* %7
%80 = fsub double %79, 1.600000e+00
store double %80, double* %7
store double 0x3F49615AC0B7ACE9, double* %3
%81 = load double, double* %3
%82 = load double, double* %7
%83 = call double @llvm.fmuladd.f64(double %81, double %82, double 0x3F9744EB6C45EC67)
store double %83, double* %3
%84 = load double, double* %3
%85 = load double, double* %7
%86 = call double @llvm.fmuladd.f64(double %84, double %85, double 0x3FCEF2ABB9B85C37)
store double %86, double* %3
%87 = load double, double* %3
%88 = load double, double* %7
%89 = call double @llvm.fmuladd.f64(double %87, double %88, double 0x3FF453CC085375B2)
store double %89, double* %3
%90 = load double, double* %3
%91 = load double, double* %7
%92 = call double @llvm.fmuladd.f64(double %90, double %91, double 0x400D2ECB1A3D02C4)
store double %92, double* %3
%93 = load double, double* %3
%94 = load double, double* %7
%95 = call double @llvm.fmuladd.f64(double %93, double %94, double 0x401713F71462256A)
store double %95, double* %3
%96 = load double, double* %3
%97 = load double, double* %7
%98 = call double @llvm.fmuladd.f64(double %96, double %97, double 0x4012857748CAB19B)
store double %98, double* %3
%99 = load double, double* %3
%100 = load double, double* %7
%101 = call double @llvm.fmuladd.f64(double %99, double %100, double 0x3FF6C665FDE9526A)
store double %101, double* %3
store double 0x3E120D3F686439E4, double* %4
%102 = load double, double* %4
%103 = load double, double* %7
%104 = call double @llvm.fmuladd.f64(double %102, double %103, double 0x3F41F18CBFDF2728)
store double %104, double* %4
%105 = load double, double* %4
%106 = load double, double* %7
%107 = call double @llvm.fmuladd.f64(double %105, double %106, double 0x3F8F207A7EAB17BF)
store double %107, double* %4
%108 = load double, double* %4
%109 = load double, double* %7
%110 = call double @llvm.fmuladd.f64(double %108, double %109, double 0x3FC2F5123394F040)
store double %110, double* %4
%111 = load double, double* %4
%112 = load double, double* %7
%113 = call double @llvm.fmuladd.f64(double %111, double %112, double 0x3FE61292F23385C9)
store double %113, double* %4
%114 = load double, double* %4
%115 = load double, double* %7
%116 = call double @llvm.fmuladd.f64(double %114, double %115, double 0x3FFAD278E6526633)
store double %116, double* %4
%117 = load double, double* %4
%118 = load double, double* %7
%119 = call double @llvm.fmuladd.f64(double %117, double %118, double 0x40006CEFBB46A449)
store double %119, double* %4
%120 = load double, double* %4
%121 = load double, double* %7
%122 = call double @llvm.fmuladd.f64(double %120, double %121, double 1.000000e+00)
store double %122, double* %4
br label %168
123: ; preds = %71
%124 = load double, double* %7
%125 = fsub double %124, 5.000000e+00
store double %125, double* %7
store double 0x3E8AFB74D693BF93, double* %3
%126 = load double, double* %3
%127 = load double, double* %7
%128 = call double @llvm.fmuladd.f64(double %126, double %127, double 0x3EFC6EC6CC59E02A)
store double %128, double* %3
%129 = load double, double* %3
%130 = load double, double* %7
%131 = call double @llvm.fmuladd.f64(double %129, double %130, double 0x3F545C1908425345)
store double %131, double* %3
%132 = load double, double* %3
%133 = load double, double* %7
%134 = call double @llvm.fmuladd.f64(double %132, double %133, double 0x3F9B2B41193B4EE7)
store double %134, double* %3
%135 = load double, double* %3
%136 = load double, double* %7
%137 = call double @llvm.fmuladd.f64(double %135, double %136, double 0x3FD2FAD9315255CF)
store double %137, double* %3
%138 = load double, double* %3
%139 = load double, double* %7
%140 = call double @llvm.fmuladd.f64(double %138, double %139, double 0x3FFC8EA6461FA445)
store double %140, double* %3
%141 = load double, double* %3
%142 = load double, double* %7
%143 = call double @llvm.fmuladd.f64(double %141, double %142, double 0x4015DAEA6E875003)
store double %143, double* %3
%144 = load double, double* %3
%145 = load double, double* %7
%146 = call double @llvm.fmuladd.f64(double %144, double %145, double 0x401AA1B1C13EE526)
store double %146, double* %3
store double 0x3CE269BFF1F8C190, double* %4
%147 = load double, double* %4
%148 = load double, double* %7
%149 = call double @llvm.fmuladd.f64(double %147, double %148, double 0x3E831446F740B9E0)
store double %149, double* %4
%150 = load double, double* %4
%151 = load double, double* %7
%152 = call double @llvm.fmuladd.f64(double %150, double %151, double 0x3EF35C2C496374BF)
store double %152, double* %4
%153 = load double, double* %4
%154 = load double, double* %7
%155 = call double @llvm.fmuladd.f64(double %153, double %154, double 0x3F49C8BC979DC5D7)
store double %155, double* %4
%156 = load double, double* %4
%157 = load double, double* %7
%158 = call double @llvm.fmuladd.f64(double %156, double %157, double 0x3F8E76F93215462A)
store double %158, double* %4
%159 = load double, double* %4
%160 = load double, double* %7
%161 = call double @llvm.fmuladd.f64(double %159, double %160, double 0x3FC186EB183443FB)
store double %161, double* %4
%162 = load double, double* %4
%163 = load double, double* %7
%164 = call double @llvm.fmuladd.f64(double %162, double %163, double 0x3FE331D34FC7D77F)
store double %164, double* %4
%165 = load double, double* %4
%166 = load double, double* %7
%167 = call double @llvm.fmuladd.f64(double %165, double %166, double 1.000000e+00)
store double %167, double* %4
br label %168
168: ; preds = %123, %78
%169 = load double, double* %5
%170 = fcmp olt double %169, 0.000000e+00
br i1 %170, label %171, label %174
171: ; preds = %168
%172 = load double, double* %3
%173 = fneg double %172
store double %173, double* %3
br label %174
174: ; preds = %171, %168
br label %175
175: ; preds = %174, %13
%176 = load double, double* %3
%177 = load double, double* %4
%178 = fdiv double %176, %177
ret double %178
}

LLVM IR (-O2):
define double @ppnd16(double %0) {
%2 = fadd double %0, -5.000000e-01
%3 = tail call double @llvm.fabs.f64(double %2)
%4 = fcmp ugt double %3, 4.250000e-01
br i1 %4, label %23, label %5
5: ; preds = %1
%6 = fneg double %2
%7 = tail call double @llvm.fmuladd.f64(double %6, double %2, double 1.806250e-01)
%8 = tail call double @llvm.fmuladd.f64(double %7, double 0x40A39A296F7D925E, double 0x40E052D26B2E45E4)
%9 = tail call double @llvm.fmuladd.f64(double %8, double %7, double 0x40F06C1C55B78F20)
%10 = tail call double @llvm.fmuladd.f64(double %9, double %7, double 0x40E66C3E869B752A)
%11 = tail call double @llvm.fmuladd.f64(double %10, double %7, double 0x40CAD1D8CD4EE71D)
%12 = tail call double @llvm.fmuladd.f64(double %11, double %7, double 0x409ECE5D2213C0CC)
%13 = tail call double @llvm.fmuladd.f64(double %12, double %7, double 0x4060A4888B1A436E)
%14 = tail call double @llvm.fmuladd.f64(double %13, double %7, double 0x400B18D91E9EEF75)
%15 = fmul double %2, %14
%16 = tail call double @llvm.fmuladd.f64(double %7, double 0x40B46A7ECA984B69, double 0x40DC0E457CB1AE76)
%17 = tail call double @llvm.fmuladd.f64(double %16, double %7, double 0x40E3317CAA64F4BE)
%18 = tail call double @llvm.fmuladd.f64(double %17, double %7, double 0x40D4B772D5D65266)
%19 = tail call double @llvm.fmuladd.f64(double %18, double %7, double 0x40B512322E75C89F)
%20 = tail call double @llvm.fmuladd.f64(double %19, double %7, double 0x4085797EFDC8B3F7)
%21 = tail call double @llvm.fmuladd.f64(double %20, double %7, double 0x4045281B386E1AB5)
%22 = tail call double @llvm.fmuladd.f64(double %21, double %7, double 1.000000e+00)
br label %60
23: ; preds = %1
%24 = fsub double 1.000000e+00, %0
%25 = fcmp ogt double %24, %0
%26 = select i1 %25, double %0, double %24
%27 = tail call i32 @log(double %26)
%28 = sub nsw i32 0, %27
%29 = tail call double @sqrt(i32 %28)
%30 = fcmp ugt double %29, 5.000000e+00
br i1 %30, label %42, label %31
31: ; preds = %23
%32 = fadd double %29, -1.600000e+00
%33 = insertelement <2 x double> poison, double %32, i64 0
%34 = shufflevector <2 x double> %33, <2 x double> poison, <2 x i32> zeroinitializer
%35 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %34, <2 x double> <double 0x3E120D3F686439E4, double 0x3F49615AC0B7ACE9>, <2 x double> <double 0x3F41F18CBFDF2728, double 0x3F9744EB6C45EC67>)
%36 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %35, <2 x double> %34, <2 x double> <double 0x3F8F207A7EAB17BF, double 0x3FCEF2ABB9B85C37>)
%37 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %36, <2 x double> %34, <2 x double> <double 0x3FC2F5123394F040, double 0x3FF453CC085375B2>)
%38 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %37, <2 x double> %34, <2 x double> <double 0x3FE61292F23385C9, double 0x400D2ECB1A3D02C4>)
%39 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %38, <2 x double> %34, <2 x double> <double 0x3FFAD278E6526633, double 0x401713F71462256A>)
%40 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %39, <2 x double> %34, <2 x double> <double 0x40006CEFBB46A449, double 0x4012857748CAB19B>)
%41 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %40, <2 x double> %34, <2 x double> <double 1.000000e+00, double 0x3FF6C665FDE9526A>)
br label %53
42: ; preds = %23
%43 = fadd double %29, -5.000000e+00
%44 = insertelement <2 x double> poison, double %43, i64 0
%45 = shufflevector <2 x double> %44, <2 x double> poison, <2 x i32> zeroinitializer
%46 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %45, <2 x double> <double 0x3CE269BFF1F8C190, double 0x3E8AFB74D693BF93>, <2 x double> <double 0x3E831446F740B9E0, double 0x3EFC6EC6CC59E02A>)
%47 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %46, <2 x double> %45, <2 x double> <double 0x3EF35C2C496374BF, double 0x3F545C1908425345>)
%48 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %47, <2 x double> %45, <2 x double> <double 0x3F49C8BC979DC5D7, double 0x3F9B2B41193B4EE7>)
%49 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %48, <2 x double> %45, <2 x double> <double 0x3F8E76F93215462A, double 0x3FD2FAD9315255CF>)
%50 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %49, <2 x double> %45, <2 x double> <double 0x3FC186EB183443FB, double 0x3FFC8EA6461FA445>)
%51 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %50, <2 x double> %45, <2 x double> <double 0x3FE331D34FC7D77F, double 0x4015DAEA6E875003>)
%52 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %51, <2 x double> %45, <2 x double> <double 1.000000e+00, double 0x401AA1B1C13EE526>)
br label %53
53: ; preds = %42, %31
%54 = phi <2 x double> [ %41, %31 ], [ %52, %42 ]
%55 = fcmp olt double %2, 0.000000e+00
%56 = extractelement <2 x double> %54, i64 1
%57 = fneg double %56
%58 = select i1 %55, double %57, double %56
%59 = extractelement <2 x double> %54, i64 0
br label %60
60: ; preds = %53, %5
%61 = phi double [ %22, %5 ], [ %59, %53 ]
%62 = phi double [ %15, %5 ], [ %58, %53 ]
%63 = fdiv double %62, %61
ret double %63
}