#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 erf__(double x) {
  static double c__ = .564189583547756;
  static double a[5] = {7.7105849500132e-5, -.00133733772997339,
                        .0323076579225834, .0479137145607681, .128379167095513};
  static double b[3] = {.00301048631703895, .0538971687740286,
                        .375795757275549};
  static double p[8] = {-1.36864857382717e-7, .564195517478974,
                        7.21175825088309,     43.1622272220567,
                        152.98928504694,      339.320816734344,
                        451.918953711873,     300.459261020162};
  static double q[8] = {1.,
                        12.7827273196294,
                        77.0001529352295,
                        277.585444743988,
                        638.980264465631,
                        931.35409485061,
                        790.950925327898,
                        300.459260956983};
  static double r__[5] = {2.10144126479064, 26.2370141675169, 21.3688200555087,
                          4.6580782871847, .282094791773523};
  static double s[4] = {94.153775055546, 187.11481179959, 99.0191814623914,
                        18.0124575948747};
  double ret_val;
  double t, x2, ax, bot, top;
  ax = fabs(x);
  if (ax > 0.5) {
    goto L10;
  }
  t = x * x;
  top = (((a[0] * t + a[1]) * t + a[2]) * t + a[3]) * t + a[4] + 1.0;
  bot = ((b[0] * t + b[1]) * t + b[2]) * t + 1.0;
  ret_val = x * (top / bot);
  return ret_val;
L10:
  if (ax > 4.0) {
    goto L20;
  }
  top = ((((((p[0] * ax + p[1]) * ax + p[2]) * ax + p[3]) * ax + p[4]) * ax +
          p[5]) *
             ax +
         p[6]) *
            ax +
        p[7];
  bot = ((((((q[0] * ax + q[1]) * ax + q[2]) * ax + q[3]) * ax + q[4]) * ax +
          q[5]) *
             ax +
         q[6]) *
            ax +
        q[7];
  ret_val = 0.5 - exp(-x * x) * top / bot + 0.5;
  if (x < 0.0) {
    ret_val = -ret_val;
  }
  return ret_val;
L20:
  if (ax >= 5.8) {
    goto L30;
  }
  x2 = x * x;
  t = 1.0 / x2;
  top = (((r__[0] * t + r__[1]) * t + r__[2]) * t + r__[3]) * t + r__[4];
  bot = (((s[0] * t + s[1]) * t + s[2]) * t + s[3]) * t + 1.0;
  ret_val = (c__ - top / (x2 * bot)) / ax;
  ret_val = 0.5 - exp(-x2) * ret_val + 0.5;
  if (x < 0.0) {
    ret_val = -ret_val;
  }
  return ret_val;
L30:
  ret_val = x > 0 ? 1 : -1;
  return ret_val;
}


x86 assembly (clang, -O0):
<erf__>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
movaps 0xef7(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xec1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    114e <erf__+0x3e>
jmp    123d <erf__+0x12d>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0x2edb(%rip),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2ed6(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2ec9(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2ebc(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2eaf(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe47(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0x2e9e(%rip),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2e99(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2e8c(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdfb(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1617 <erf__+0x507>
movsd  -0x30(%rbp),%xmm0
movsd  0xdc6(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1259 <erf__+0x149>
jmp    1427 <erf__+0x317>
movsd  0x2e2f(%rip),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2e2a(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2e1d(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2e10(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2e03(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2df6(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2de9(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2ddc(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0x2dcf(%rip),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2dca(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2dbd(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2db0(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2da3(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2d96(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2d89(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x2d7c(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x10(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
mulsd  -0x40(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xc2c(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xc20(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1418 <erf__+0x308>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1617 <erf__+0x507>
movsd  -0x30(%rbp),%xmm0
movsd  0xbe4(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1443 <erf__+0x333>
jmp    15eb <erf__+0x4db>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xbae(%rip),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0x2ca4(%rip),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c9f(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c92(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c85(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c78(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0x2c73(%rip),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c6e(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c61(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0x2c54(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xaeb(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0x2b02(%rip),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
mulsd  -0x38(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1030 <exp@plt>
movsd  -0x18(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xa68(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xa5c(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    15dc <erf__+0x4cc>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1617 <erf__+0x507>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
mov    $0xffffffff,%eax
mov    $0x1,%ecx
ucomisd %xmm1,%xmm0
cmova  %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<erf__>:
sub    $0x28,%rsp
movapd %xmm0,%xmm4
movapd 0xee0(%rip),%xmm1
andpd  %xmm0,%xmm1
ucomisd 0xf04(%rip),%xmm1
jbe    120e <erf__+0xfe>
ucomisd 0xf46(%rip),%xmm1
jbe    128f <erf__+0x17f>
ucomisd 0xfb8(%rip),%xmm1
jae    13ba <erf__+0x2aa>
movapd %xmm4,%xmm0
mulsd  %xmm4,%xmm0
movsd  0xf02(%rip),%xmm3
movapd %xmm4,0x10(%rsp)
movapd %xmm3,%xmm4
divsd  %xmm0,%xmm4
movsd  0xf94(%rip),%xmm2
mulsd  %xmm4,%xmm2
addsd  0xf90(%rip),%xmm2
mulsd  %xmm4,%xmm2
addsd  0xf8c(%rip),%xmm2
mulsd  %xmm4,%xmm2
addsd  0xf88(%rip),%xmm2
mulsd  %xmm4,%xmm2
addsd  0xf84(%rip),%xmm2
movsd  0xf84(%rip),%xmm5
mulsd  %xmm4,%xmm5
addsd  0xf80(%rip),%xmm5
mulsd  %xmm4,%xmm5
addsd  0xf7c(%rip),%xmm5
mulsd  %xmm4,%xmm5
addsd  0xf78(%rip),%xmm5
mulsd  %xmm4,%xmm5
addsd  %xmm3,%xmm5
mulsd  %xmm0,%xmm5
divsd  %xmm5,%xmm2
movsd  0xf68(%rip),%xmm3
subsd  %xmm2,%xmm3
divsd  %xmm1,%xmm3
movsd  %xmm3,0x8(%rsp)
xorpd  0xe12(%rip),%xmm0
call   1030 <exp@plt>
mulsd  0x8(%rsp),%xmm0
jmp    1372 <erf__+0x262>
movapd %xmm4,%xmm1
mulsd  %xmm4,%xmm1
movsd  0xe1a(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe16(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe12(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe0e(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe0a(%rip),%xmm0
movsd  0xe0a(%rip),%xmm2
movsd  0xe0a(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  0xe06(%rip),%xmm3
addsd  %xmm2,%xmm0
mulsd  %xmm1,%xmm3
addsd  0xdfe(%rip),%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
divsd  %xmm3,%xmm0
mulsd  %xmm4,%xmm0
add    $0x28,%rsp
ret
movsd  0xdf1(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xded(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xde9(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xde5(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xde1(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xddd(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdd9(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdd5(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xdcf(%rip),%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdc7(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdc3(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdbf(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdbb(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdb7(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xdb3(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
movapd %xmm4,%xmm0
xorpd  0xcb9(%rip),%xmm0
mulsd  %xmm4,%xmm0
movapd %xmm4,0x10(%rsp)
call   1030 <exp@plt>
mulsd  0x8(%rsp),%xmm0
divsd  0x20(%rsp),%xmm0
movsd  0xcb6(%rip),%xmm1
movapd %xmm1,%xmm2
subsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
movapd 0xc82(%rip),%xmm3
xorpd  %xmm2,%xmm3
xorpd  %xmm0,%xmm0
movapd 0x10(%rsp),%xmm1
cmpltsd %xmm0,%xmm1
movapd %xmm1,%xmm0
andnpd %xmm2,%xmm0
andpd  %xmm3,%xmm1
orpd   %xmm0,%xmm1
movapd %xmm1,%xmm0
add    $0x28,%rsp
ret
xorpd  %xmm0,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm4
seta   %al
lea    0xc52(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
add    $0x28,%rsp
ret

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

LLVM IR (-O2):
define double @erf__(double %0) {
%2 = tail call double @llvm.fabs.f64(double %0)
%3 = fcmp ogt 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 %71
16: ; preds = %1
%17 = fcmp ogt double %2, 4.000000e+00
br i1 %17, label %43, 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 5.000000e-01, %37
%39 = fadd double %38, 5.000000e-01
%40 = fcmp olt double %0, 0.000000e+00
%41 = fneg double %39
%42 = select i1 %40, double %41, double %39
br label %71
43: ; preds = %16
%44 = fcmp ult double %2, 5.800000e+00
br i1 %44, label %45, label %68
45: ; preds = %43
%46 = fmul double %0, %0
%47 = fdiv double 1.000000e+00, %46
%48 = tail call double @llvm.fmuladd.f64(double %47, double 0x4000CFC07015ECE7, double 0x403A3CACF5E22C7B)
%49 = tail call double @llvm.fmuladd.f64(double %48, double %47, double 0x40355E6AFDBC84CE)
%50 = tail call double @llvm.fmuladd.f64(double %49, double %47, double 0x4012A1DF4646A9F7)
%51 = tail call double @llvm.fmuladd.f64(double %50, double %47, double 0x3FD20DD75042826F)
%52 = tail call double @llvm.fmuladd.f64(double %47, double 0x405789D77354A0AF, double 0x406763AC89CB8DE3)
%53 = tail call double @llvm.fmuladd.f64(double %52, double %47, double 0x4058C13A44E26A46)
%54 = tail call double @llvm.fmuladd.f64(double %53, double %47, double 0x403203306BC292DB)
%55 = tail call double @llvm.fmuladd.f64(double %54, double %47, double 1.000000e+00)
%56 = fmul double %46, %55
%57 = fdiv double %51, %56
%58 = fsub double 0x3FE20DD750429B6A, %57
%59 = fdiv double %58, %2
%60 = fneg double %46
%61 = tail call double @exp(double %60)
%62 = fneg double %61
%63 = tail call double @llvm.fmuladd.f64(double %62, double %59, double 5.000000e-01)
%64 = fadd double %63, 5.000000e-01
%65 = fcmp olt double %0, 0.000000e+00
%66 = fneg double %64
%67 = select i1 %65, double %66, double %64
br label %71
68: ; preds = %43
%69 = fcmp ogt double %0, 0.000000e+00
%70 = select i1 %69, double 1.000000e+00, double -1.000000e+00
br label %71
71: ; preds = %68, %45, %18, %4
%72 = phi double [ %70, %68 ], [ %67, %45 ], [ %42, %18 ], [ %15, %4 ]
ret double %72
}