#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 exp(double);
double fabs(double);
double enormp(double x) {
  double x1, x2, x3, x4, ret_val;
  static double xp[5] = {7.7105849500132e-5, -0.00133733772997339,
                         0.0323076579225834, 0.0479137145607681,
                         0.128379167095513};
  static double xq[3] = {0.00301048631703895, 0.0538971687740286,
                         0.375795757275549};
  static double xr[8] = {-1.36864857382717e-7, 0.564195517478974,
                         7.21175825088309,     43.1622272220567,
                         152.98928504694,      339.320816734344,
                         451.918953711873,     300.459261020162};
  static double xs[8] = {1.0,
                         12.7827273196294,
                         77.0001529352295,
                         277.585444743988,
                         638.980264465631,
                         931.35409485061,
                         790.950925327898,
                         300.459260956983};
  static double xt[5] = {2.10144126479064, 26.2370141675169, 21.3688200555087,
                         4.6580782871847, 0.282094791773523};
  static double xu[4] = {94.153775055546, 187.11481179959, 99.0191814623914,
                         18.0124575948747};
  double yy1, yy2;
  x3 = (double)0.564189583547756;
  x1 = fabs(x);
  if (x1 <= .5) {
    x4 = x * x;
    yy1 = (((xp[0] * x4 + xp[1]) * x4 + xp[2]) * x4 + xp[3]) * x4 + xp[4] + 1.;
    yy2 = ((xq[0] * x4 + xq[1]) * x4 + xq[2]) * x4 + 1.;
    ret_val = x * (yy1 / yy2);
  } else if (x1 <= 4.) {
    yy1 = ((((((xr[0] * x1 + xr[1]) * x1 + xr[2]) * x1 + xr[3]) * x1 + xr[4]) *
                x1 +
            xr[5]) *
               x1 +
           xr[6]) *
              x1 +
          xr[7];
    yy2 = ((((((xs[0] * x1 + xs[1]) * x1 + xs[2]) * x1 + xs[3]) * x1 + xs[4]) *
                x1 +
            xs[5]) *
               x1 +
           xs[6]) *
              x1 +
          xs[7];
    ret_val = 1. - exp(-x * x) * yy1 / yy2;
    if (x < 0.)
      ret_val *= -1.0;
  } else {
    x2 = x * x;
    x4 *= 1.;
    x4 = 0.5;
    yy1 = (((xt[0] * x4 + xt[1]) * x4 + xt[2]) * x4 + xt[3]) * x4 + xt[4];
    yy2 = (((xu[0] * x4 + xu[1]) * x4 + xu[2]) * x4 + xu[3]) * x4 + 1.;
    ret_val = x3 / x1 - yy1 * x1 / (x2 * yy2);
    ret_val = 1. - exp(-x2) * ret_val;
    if (x < 0.)
      ret_val = -ret_val;
  }
  return ret_val;
}


x86 assembly (clang, -O0):
<enormp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  0xee3(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm0
movaps 0xefa(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xeb9(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     1237 <enormp+0x127>
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0x2ec7(%rip),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2ec2(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2eb5(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2ea8(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2e9b(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe53(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0x2e8a(%rip),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2e85(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2e78(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe07(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
divsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1599 <enormp+0x489>
movsd  0xdd1(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     13f3 <enormp+0x2e3>
movsd  0x2e2e(%rip),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2e29(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2e1c(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2e0f(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2e02(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2df5(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2de8(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2ddb(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0x2dce(%rip),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2dc9(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2dbc(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2daf(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2da2(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2d95(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2d88(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x2d7b(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x8(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
mulsd  -0x38(%rbp),%xmm1
divsd  -0x40(%rbp),%xmm1
movsd  0xc53(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    13ee <enormp+0x2de>
movsd  0xc3c(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1594 <enormp+0x484>
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xc0e(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xbe4(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0x2cd7(%rip),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2cd2(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2cc5(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2cb8(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2cab(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0x2ca6(%rip),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2ca1(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2c94(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x2c87(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb3e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x20(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
mulsd  -0x40(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1030 <exp@plt>
movsd  -0x30(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xac1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    158f <enormp+0x47f>
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1594 <enormp+0x484>
jmp    1599 <enormp+0x489>
movsd  -0x30(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<enormp>:
sub    $0x38,%rsp
movapd %xmm0,%xmm4
movapd 0xee0(%rip),%xmm1
andpd  %xmm0,%xmm1
movsd  0xf04(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    11aa <enormp+0x9a>
movsd  0xf46(%rip),%xmm0
ucomisd %xmm1,%xmm0
movapd %xmm4,0x20(%rsp)
jae    122b <enormp+0x11b>
movapd %xmm4,%xmm0
mulsd  %xmm4,%xmm0
movapd %xmm1,%xmm2
mulsd  0xfa2(%rip),%xmm2
movsd  0xfa2(%rip),%xmm3
mulsd  %xmm0,%xmm3
movapd 0xeae(%rip),%xmm5
unpcklpd %xmm2,%xmm5
unpcklpd %xmm3,%xmm1
divpd  %xmm1,%xmm5
movapd %xmm5,%xmm1
unpckhpd %xmm5,%xmm1
subsd  %xmm1,%xmm5
movapd %xmm5,(%rsp)
xorpd  0xe79(%rip),%xmm0
call   1030 <exp@plt>
movapd %xmm0,%xmm1
mulsd  (%rsp),%xmm1
jmp    130a <enormp+0x1fa>
movapd %xmm4,%xmm1
mulsd  %xmm4,%xmm1
movsd  0xe7e(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe7a(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe76(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe72(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe6e(%rip),%xmm0
movsd  0xe6e(%rip),%xmm2
movsd  0xe6e(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  0xe6a(%rip),%xmm3
addsd  %xmm2,%xmm0
mulsd  %xmm1,%xmm3
addsd  0xe62(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
divsd  %xmm3,%xmm0
mulsd  %xmm4,%xmm0
add    $0x38,%rsp
ret
movsd  0xe55(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe51(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe4d(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe49(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe45(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe41(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe3d(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe39(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xe34(%rip),%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe2c(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe28(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe24(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe20(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe1c(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe18(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movapd 0xd22(%rip),%xmm0
xorpd  %xmm4,%xmm0
mulsd  %xmm4,%xmm0
call   1030 <exp@plt>
movapd %xmm0,%xmm1
mulsd  (%rsp),%xmm1
divsd  0x18(%rsp),%xmm1
movsd  0xd4e(%rip),%xmm0
subsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd 0x20(%rsp),%xmm1
jbe    132a <enormp+0x21a>
xorpd  0xce6(%rip),%xmm0
add    $0x38,%rsp
ret

LLVM IR (-O0):
@enormp.xp = internal global [5 x double] [double 0x3F14367C68613852, double 0xBF55E9337417A2A8, double 0x3FA08AA11C602E02, double 0x3FA888257A230271, double 0x3FC06EBA8214DB78]
@enormp.xq = internal global [3 x double] [double 0x3F68A97288DB092F, double 0x3FAB9868E2767FFE, double 0x3FD80D09A5DE569F]
@enormp.xr = internal global [8 x double] [double 0xBE825EA4045ABDE7, double 0x3FE20DE3C203E757, double 0x401CD8D727A8CDDC, double 0x404594C3DC92A092, double 0x40631FA8391D60EF, double 0x4075352210BA6046, double 0x407C3EB408CEB084, double 0x4072C75922155EC6]
@enormp.xs = internal global [8 x double] [double 1.000000e+00, double 0x402990C1A29EFCEF, double 0x405340028174F3C8, double 0x4071595DFB4ED0B2, double 0x4083F7D794E56A87, double 0x408D1AD52FAE586A, double 0x4088B79B7EBD0214, double 0x4072C75922046925]
@enormp.xt = internal global [5 x double] [double 0x4000CFC07015ECE7, double 0x403A3CACF5E22C7B, double 0x40355E6AFDBC84CE, double 0x4012A1DF4646A9F7, double 0x3FD20DD75042826F]
@enormp.xu = internal global [4 x double] [double 0x405789D77354A0AF, double 0x406763AC89CB8DE3, double 0x4058C13A44E26A46, double 0x403203306BC292DB]
define double @enormp(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
store double %0, double* %2
store double 0x3FE20DD750429B6A, double* %5
%10 = load double, double* %2
%11 = call double @llvm.fabs.f64(double %10)
store double %11, double* %3
%12 = load double, double* %3
%13 = fcmp ole double %12, 5.000000e-01
br i1 %13, label %14, label %46
14: ; preds = %1
%15 = load double, double* %2
%16 = load double, double* %2
%17 = fmul double %15, %16
store double %17, double* %6
%18 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xp, i64 0, i64 0)
%19 = load double, double* %6
%20 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xp, i64 0, i64 1)
%21 = call double @llvm.fmuladd.f64(double %18, double %19, double %20)
%22 = load double, double* %6
%23 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xp, i64 0, i64 2)
%24 = call double @llvm.fmuladd.f64(double %21, double %22, double %23)
%25 = load double, double* %6
%26 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xp, i64 0, i64 3)
%27 = call double @llvm.fmuladd.f64(double %24, double %25, double %26)
%28 = load double, double* %6
%29 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xp, i64 0, i64 4)
%30 = call double @llvm.fmuladd.f64(double %27, double %28, double %29)
%31 = fadd double %30, 1.000000e+00
store double %31, double* %8
%32 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @enormp.xq, i64 0, i64 0)
%33 = load double, double* %6
%34 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @enormp.xq, i64 0, i64 1)
%35 = call double @llvm.fmuladd.f64(double %32, double %33, double %34)
%36 = load double, double* %6
%37 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @enormp.xq, i64 0, i64 2)
%38 = call double @llvm.fmuladd.f64(double %35, double %36, double %37)
%39 = load double, double* %6
%40 = call double @llvm.fmuladd.f64(double %38, double %39, double 1.000000e+00)
store double %40, double* %9
%41 = load double, double* %2
%42 = load double, double* %8
%43 = load double, double* %9
%44 = fdiv double %42, %43
%45 = fmul double %41, %44
store double %45, double* %7
br label %165
46: ; preds = %1
%47 = load double, double* %3
%48 = fcmp ole double %47, 4.000000e+00
br i1 %48, label %49, label %110
49: ; preds = %46
%50 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 0)
%51 = load double, double* %3
%52 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 1)
%53 = call double @llvm.fmuladd.f64(double %50, double %51, double %52)
%54 = load double, double* %3
%55 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 2)
%56 = call double @llvm.fmuladd.f64(double %53, double %54, double %55)
%57 = load double, double* %3
%58 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 3)
%59 = call double @llvm.fmuladd.f64(double %56, double %57, double %58)
%60 = load double, double* %3
%61 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 4)
%62 = call double @llvm.fmuladd.f64(double %59, double %60, double %61)
%63 = load double, double* %3
%64 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 5)
%65 = call double @llvm.fmuladd.f64(double %62, double %63, double %64)
%66 = load double, double* %3
%67 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 6)
%68 = call double @llvm.fmuladd.f64(double %65, double %66, double %67)
%69 = load double, double* %3
%70 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xr, i64 0, i64 7)
%71 = call double @llvm.fmuladd.f64(double %68, double %69, double %70)
store double %71, double* %8
%72 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 0)
%73 = load double, double* %3
%74 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 1)
%75 = call double @llvm.fmuladd.f64(double %72, double %73, double %74)
%76 = load double, double* %3
%77 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 2)
%78 = call double @llvm.fmuladd.f64(double %75, double %76, double %77)
%79 = load double, double* %3
%80 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 3)
%81 = call double @llvm.fmuladd.f64(double %78, double %79, double %80)
%82 = load double, double* %3
%83 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 4)
%84 = call double @llvm.fmuladd.f64(double %81, double %82, double %83)
%85 = load double, double* %3
%86 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 5)
%87 = call double @llvm.fmuladd.f64(double %84, double %85, double %86)
%88 = load double, double* %3
%89 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 6)
%90 = call double @llvm.fmuladd.f64(double %87, double %88, double %89)
%91 = load double, double* %3
%92 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @enormp.xs, i64 0, i64 7)
%93 = call double @llvm.fmuladd.f64(double %90, double %91, double %92)
store double %93, double* %9
%94 = load double, double* %2
%95 = fneg double %94
%96 = load double, double* %2
%97 = fmul double %95, %96
%98 = call double @exp(double %97)
%99 = load double, double* %8
%100 = fmul double %98, %99
%101 = load double, double* %9
%102 = fdiv double %100, %101
%103 = fsub double 1.000000e+00, %102
store double %103, double* %7
%104 = load double, double* %2
%105 = fcmp olt double %104, 0.000000e+00
br i1 %105, label %106, label %109
106: ; preds = %49
%107 = load double, double* %7
%108 = fmul double %107, -1.000000e+00
store double %108, double* %7
br label %109
109: ; preds = %106, %49
br label %164
110: ; preds = %46
%111 = load double, double* %2
%112 = load double, double* %2
%113 = fmul double %111, %112
store double %113, double* %4
%114 = load double, double* %6
%115 = fmul double %114, 1.000000e+00
store double %115, double* %6
store double 5.000000e-01, double* %6
%116 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xt, i64 0, i64 0)
%117 = load double, double* %6
%118 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xt, i64 0, i64 1)
%119 = call double @llvm.fmuladd.f64(double %116, double %117, double %118)
%120 = load double, double* %6
%121 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xt, i64 0, i64 2)
%122 = call double @llvm.fmuladd.f64(double %119, double %120, double %121)
%123 = load double, double* %6
%124 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xt, i64 0, i64 3)
%125 = call double @llvm.fmuladd.f64(double %122, double %123, double %124)
%126 = load double, double* %6
%127 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @enormp.xt, i64 0, i64 4)
%128 = call double @llvm.fmuladd.f64(double %125, double %126, double %127)
store double %128, double* %8
%129 = load double, double* getelementptr inbounds ([4 x double], [4 x double]* @enormp.xu, i64 0, i64 0)
%130 = load double, double* %6
%131 = load double, double* getelementptr inbounds ([4 x double], [4 x double]* @enormp.xu, i64 0, i64 1)
%132 = call double @llvm.fmuladd.f64(double %129, double %130, double %131)
%133 = load double, double* %6
%134 = load double, double* getelementptr inbounds ([4 x double], [4 x double]* @enormp.xu, i64 0, i64 2)
%135 = call double @llvm.fmuladd.f64(double %132, double %133, double %134)
%136 = load double, double* %6
%137 = load double, double* getelementptr inbounds ([4 x double], [4 x double]* @enormp.xu, i64 0, i64 3)
%138 = call double @llvm.fmuladd.f64(double %135, double %136, double %137)
%139 = load double, double* %6
%140 = call double @llvm.fmuladd.f64(double %138, double %139, double 1.000000e+00)
store double %140, double* %9
%141 = load double, double* %5
%142 = load double, double* %3
%143 = fdiv double %141, %142
%144 = load double, double* %8
%145 = load double, double* %3
%146 = fmul double %144, %145
%147 = load double, double* %4
%148 = load double, double* %9
%149 = fmul double %147, %148
%150 = fdiv double %146, %149
%151 = fsub double %143, %150
store double %151, double* %7
%152 = load double, double* %4
%153 = fneg double %152
%154 = call double @exp(double %153)
%155 = load double, double* %7
%156 = fneg double %154
%157 = call double @llvm.fmuladd.f64(double %156, double %155, double 1.000000e+00)
store double %157, double* %7
%158 = load double, double* %2
%159 = fcmp olt double %158, 0.000000e+00
br i1 %159, label %160, label %163
160: ; preds = %110
%161 = load double, double* %7
%162 = fneg double %161
store double %162, double* %7
br label %163
163: ; preds = %160, %110
br label %164
164: ; preds = %163, %109
br label %165
165: ; preds = %164, %14
%166 = load double, double* %7
ret double %166
}

LLVM IR (-O2):
define double @enormp(double %0) {
%2 = tail call double @llvm.fabs.f64(double %0)
%3 = fcmp ugt double %2, 5.000000e-01
br i1 %3, label %16, label %4
4: ; preds = %1
%5 = fmul double %0, %0
%6 = tail call double @llvm.fmuladd.f64(double %5, double 0x3F14367C68613852, double 0xBF55E9337417A2A8)
%7 = tail call double @llvm.fmuladd.f64(double %6, double %5, double 0x3FA08AA11C602E02)
%8 = tail call double @llvm.fmuladd.f64(double %7, double %5, double 0x3FA888257A230271)
%9 = tail call double @llvm.fmuladd.f64(double %8, double %5, double 0x3FC06EBA8214DB78)
%10 = fadd double %9, 1.000000e+00
%11 = tail call double @llvm.fmuladd.f64(double %5, double 0x3F68A97288DB092F, double 0x3FAB9868E2767FFE)
%12 = tail call double @llvm.fmuladd.f64(double %11, double %5, double 0x3FD80D09A5DE569F)
%13 = tail call double @llvm.fmuladd.f64(double %12, double %5, double 1.000000e+00)
%14 = fdiv double %10, %13
%15 = fmul double %14, %0
br label %60
16: ; preds = %1
%17 = fcmp ugt double %2, 4.000000e+00
br i1 %17, label %42, label %18
18: ; preds = %16
%19 = tail call double @llvm.fmuladd.f64(double %2, double 0xBE825EA4045ABDE7, double 0x3FE20DE3C203E757)
%20 = tail call double @llvm.fmuladd.f64(double %19, double %2, double 0x401CD8D727A8CDDC)
%21 = tail call double @llvm.fmuladd.f64(double %20, double %2, double 0x404594C3DC92A092)
%22 = tail call double @llvm.fmuladd.f64(double %21, double %2, double 0x40631FA8391D60EF)
%23 = tail call double @llvm.fmuladd.f64(double %22, double %2, double 0x4075352210BA6046)
%24 = tail call double @llvm.fmuladd.f64(double %23, double %2, double 0x407C3EB408CEB084)
%25 = tail call double @llvm.fmuladd.f64(double %24, double %2, double 0x4072C75922155EC6)
%26 = fadd double %2, 0x402990C1A29EFCEF
%27 = tail call double @llvm.fmuladd.f64(double %26, double %2, double 0x405340028174F3C8)
%28 = tail call double @llvm.fmuladd.f64(double %27, double %2, double 0x4071595DFB4ED0B2)
%29 = tail call double @llvm.fmuladd.f64(double %28, double %2, double 0x4083F7D794E56A87)
%30 = tail call double @llvm.fmuladd.f64(double %29, double %2, double 0x408D1AD52FAE586A)
%31 = tail call double @llvm.fmuladd.f64(double %30, double %2, double 0x4088B79B7EBD0214)
%32 = tail call double @llvm.fmuladd.f64(double %31, double %2, double 0x4072C75922046925)
%33 = fneg double %0
%34 = fmul double %33, %0
%35 = tail call double @exp(double %34)
%36 = fmul double %25, %35
%37 = fdiv double %36, %32
%38 = fsub double 1.000000e+00, %37
%39 = fcmp olt double %0, 0.000000e+00
br i1 %39, label %40, label %60
40: ; preds = %18
%41 = fneg double %38
br label %60
42: ; preds = %16
%43 = fmul double %0, %0
%44 = fmul double %2, 0x4026BA864A2AE3CA
%45 = fmul double %43, 0x4050023D38591A70
%46 = insertelement <2 x double> <double 0x3FE20DD750429B6A, double poison>, double %44, i64 1
%47 = insertelement <2 x double> poison, double %2, i64 0
%48 = insertelement <2 x double> %47, double %45, i64 1
%49 = fdiv <2 x double> %46, %48
%50 = shufflevector <2 x double> %49, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%51 = fsub <2 x double> %49, %50
%52 = extractelement <2 x double> %51, i64 0
%53 = fneg double %43
%54 = tail call double @exp(double %53)
%55 = fneg double %54
%56 = tail call double @llvm.fmuladd.f64(double %55, double %52, double 1.000000e+00)
%57 = fcmp olt double %0, 0.000000e+00
br i1 %57, label %58, label %60
58: ; preds = %42
%59 = fneg double %56
br label %60
60: ; preds = %40, %18, %58, %42, %4
%61 = phi double [ %15, %4 ], [ %41, %40 ], [ %38, %18 ], [ %59, %58 ], [ %56, %42 ]
ret double %61
}