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


x86 assembly (clang, -O0):
<ppnd16>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  0x2f0e(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm1
movaps 0xeb5(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x2ef9(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     12ee <ppnd16+0x1ce>
movsd  0x2ef7(%rip),%xmm1
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0x2f04(%rip),%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2eef(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2ed2(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2eb5(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e98(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e7b(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e5e(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e41(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x2ea5(%rip),%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e90(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e73(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e56(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e39(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2e1c(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2dff(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2d72(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    166f <ppnd16+0x54f>
movsd  -0x18(%rbp),%xmm1
movsd  0x2efd(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1314 <ppnd16+0x1f4>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1326 <ppnd16+0x206>
movsd  0x2d24(%rip),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0x2ec5(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     134f <ppnd16+0x22f>
movsd  0x2eb3(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    166f <ppnd16+0x54f>
movsd  -0x20(%rbp),%xmm0
call   1030 <log@plt>
xor    %edi,%edi
sub    %eax,%edi
call   1040 <sqrt@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0x2ce4(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     14d8 <ppnd16+0x3b8>
movsd  0x2ce2(%rip),%xmm1
movsd  -0x20(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0x2d8c(%rip),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2d77(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2d5a(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2d3d(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2d20(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2d03(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2ce6(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2cc9(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2d31(%rip),%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2d1c(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2cff(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2ce2(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2cc5(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2ca8(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2c8b(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2b7e(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    162d <ppnd16+0x50d>
movsd  0x2b78(%rip),%xmm1
movsd  -0x20(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0x2cb2(%rip),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c9d(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c80(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c63(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c46(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c29(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c0c(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2bef(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2c57(%rip),%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2c42(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2c25(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2c08(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2beb(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2bce(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2bb1(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x20(%rbp),%xmm3
movsd  0x2a24(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x18(%rbp),%xmm1
movsd  0x2bbe(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1665 <ppnd16+0x545>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ppnd16>:
sub    $0x18,%rsp
movapd %xmm0,%xmm1
movsd  0xed0(%rip),%xmm5
addsd  %xmm0,%xmm5
movapd 0xf74(%rip),%xmm0
andpd  %xmm5,%xmm0
movsd  0xec0(%rip),%xmm2
ucomisd %xmm0,%xmm2
jae    1220 <ppnd16+0x100>
movsd  0xf36(%rip),%xmm3
subsd  %xmm1,%xmm3
xorpd  %xmm0,%xmm0
movapd %xmm5,%xmm2
cmpltsd %xmm0,%xmm2
movapd %xmm2,%xmm4
andnpd %xmm3,%xmm4
andpd  %xmm1,%xmm2
orpd   %xmm4,%xmm2
ucomisd %xmm2,%xmm0
jae    1392 <ppnd16+0x272>
movapd %xmm2,%xmm0
movapd %xmm5,(%rsp)
call   1030 <log@plt>
neg    %eax
mov    %eax,%edi
call   1040 <sqrt@plt>
movapd (%rsp),%xmm3
movsd  0xeef(%rip),%xmm1
ucomisd %xmm0,%xmm1
jae    12f9 <ppnd16+0x1d9>
addsd  0xeed(%rip),%xmm0
unpcklpd %xmm0,%xmm0
movapd 0xf79(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf7d(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf81(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf85(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf89(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf8d(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf91(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xf95(%rip),%xmm1
jmp    1361 <ppnd16+0x241>
movapd %xmm5,%xmm0
mulsd  %xmm5,%xmm0
movsd  0xde0(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xddc(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdd8(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdd4(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdd0(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdcc(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdc8(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdc4(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdc0(%rip),%xmm0
movsd  0xdc0(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xdbc(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xdb8(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xdb4(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xdb0(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xdac(%rip),%xmm2
mulsd  %xmm5,%xmm0
mulsd  %xmm1,%xmm2
addsd  0xda4(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xda0(%rip),%xmm2
divsd  %xmm2,%xmm0
add    $0x18,%rsp
ret
addsd  0xd9f(%rip),%xmm0
unpcklpd %xmm0,%xmm0
movapd 0xdb3(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdb7(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdbb(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdbf(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdc3(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdc7(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdcb(%rip),%xmm1
mulpd  %xmm0,%xmm1
addpd  0xdcf(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
divsd  %xmm0,%xmm1
movapd 0xe4b(%rip),%xmm0
xorpd  %xmm1,%xmm0
xorpd  %xmm2,%xmm2
cmpltsd %xmm2,%xmm3
andpd  %xmm3,%xmm0
andnpd %xmm1,%xmm3
orpd   %xmm0,%xmm3
movapd %xmm3,%xmm0
add    $0x18,%rsp
ret

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

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 %24, 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)
%23 = fdiv double %15, %22
br label %66
24: ; preds = %1
%25 = fcmp olt double %2, 0.000000e+00
%26 = fsub double 1.000000e+00, %0
%27 = select i1 %25, double %0, double %26
%28 = fcmp ugt double %27, 0.000000e+00
br i1 %28, label %29, label %66
29: ; preds = %24
%30 = tail call i32 @log(double %27)
%31 = sub nsw i32 0, %30
%32 = tail call double @sqrt(i32 %31)
%33 = fcmp ugt double %32, 5.000000e+00
br i1 %33, label %48, label %34
34: ; preds = %29
%35 = fadd double %32, -1.600000e+00
%36 = insertelement <2 x double> poison, double %35, i64 0
%37 = shufflevector <2 x double> %36, <2 x double> poison, <2 x i32> zeroinitializer
%38 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %37, <2 x double> <double 0x3F49615AC0B7ACE9, double 0x3E120D3F686439E4>, <2 x double> <double 0x3F9744EB6C45EC67, double 0x3F41F18CBFDF2728>)
%39 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %38, <2 x double> %37, <2 x double> <double 0x3FCEF2ABB9B85C37, double 0x3F8F207A7EAB17BF>)
%40 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %39, <2 x double> %37, <2 x double> <double 0x3FF453CC085375B2, double 0x3FC2F5123394F040>)
%41 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %40, <2 x double> %37, <2 x double> <double 0x400D2ECB1A3D02C4, double 0x3FE61292F23385C9>)
%42 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %41, <2 x double> %37, <2 x double> <double 0x401713F71462256A, double 0x3FFAD278E6526633>)
%43 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %42, <2 x double> %37, <2 x double> <double 0x4012857748CAB19B, double 0x40006CEFBB46A449>)
%44 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %43, <2 x double> %37, <2 x double> <double 0x3FF6C665FDE9526A, double 1.000000e+00>)
%45 = extractelement <2 x double> %44, i64 0
%46 = extractelement <2 x double> %44, i64 1
%47 = fdiv double %45, %46
br label %62
48: ; preds = %29
%49 = fadd double %32, -5.000000e+00
%50 = insertelement <2 x double> poison, double %49, i64 0
%51 = shufflevector <2 x double> %50, <2 x double> poison, <2 x i32> zeroinitializer
%52 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %51, <2 x double> <double 0x3E8AFB74D693BF93, double 0x3CE269BFF1F8C190>, <2 x double> <double 0x3EFC6EC6CC59E02A, double 0x3E831446F740B9E0>)
%53 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %52, <2 x double> %51, <2 x double> <double 0x3F545C1908425345, double 0x3EF35C2C496374BF>)
%54 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %53, <2 x double> %51, <2 x double> <double 0x3F9B2B41193B4EE7, double 0x3F49C8BC979DC5D7>)
%55 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %54, <2 x double> %51, <2 x double> <double 0x3FD2FAD9315255CF, double 0x3F8E76F93215462A>)
%56 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %55, <2 x double> %51, <2 x double> <double 0x3FFC8EA6461FA445, double 0x3FC186EB183443FB>)
%57 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %51, <2 x double> <double 0x4015DAEA6E875003, double 0x3FE331D34FC7D77F>)
%58 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %57, <2 x double> %51, <2 x double> <double 0x401AA1B1C13EE526, double 1.000000e+00>)
%59 = extractelement <2 x double> %58, i64 0
%60 = extractelement <2 x double> %58, i64 1
%61 = fdiv double %59, %60
br label %62
62: ; preds = %48, %34
%63 = phi double [ %47, %34 ], [ %61, %48 ]
%64 = fneg double %63
%65 = select i1 %25, double %64, double %63
br label %66
66: ; preds = %24, %62, %5
%67 = phi double [ %23, %5 ], [ %65, %62 ], [ 0.000000e+00, %24 ]
ret double %67
}