double gamln1(double *a) {
  static double p0 = .577215664901533e+00;
  static double p1 = .844203922187225e+00;
  static double p2 = -.168860593646662e+00;
  static double p3 = -.780427615533591e+00;
  static double p4 = -.402055799310489e+00;
  static double p5 = -.673562214325671e-01;
  static double p6 = -.271935708322958e-02;
  static double q1 = .288743195473681e+01;
  static double q2 = .312755088914843e+01;
  static double q3 = .156875193295039e+01;
  static double q4 = .361951990101499e+00;
  static double q5 = .325038868253937e-01;
  static double q6 = .667465618796164e-03;
  static double r0 = .422784335098467e+00;
  static double r1 = .848044614534529e+00;
  static double r2 = .565221050691933e+00;
  static double r3 = .156513060486551e+00;
  static double r4 = .170502484022650e-01;
  static double r5 = .497958207639485e-03;
  static double s1 = .124313399877507e+01;
  static double s2 = .548042109832463e+00;
  static double s3 = .101552187439830e+00;
  static double s4 = .713309612391000e-02;
  static double s5 = .116165475989616e-03;
  static double gamln1, w, x;
  if (*a >= 0.6e0)
    goto S10;
  w = ((((((p6 * *a + p5) * *a + p4) * *a + p3) * *a + p2) * *a + p1) * *a +
       p0) /
      ((((((q6 * *a + q5) * *a + q4) * *a + q3) * *a + q2) * *a + q1) * *a +
       1.0e0);
  gamln1 = -(*a * w);
  return gamln1;
S10:
  x = *a - 0.5e0 - 0.5e0;
  w = (((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x + r0) /
      (((((s5 * x + s4) * x + s3) * x + s2) * x + s1) * x + 1.0e0);
  gamln1 = x * w;
  return gamln1;
}


x86 assembly (clang, -O0):
<gamln1>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xee8(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1127 <gamln1+0x27>
jmp    12a4 <gamln1+0x1a4>
movsd  0x2f21(%rip),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  0x2f09(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  0x2ee9(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  0x2ec9(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  0x2ea9(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  0x2e89(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  0x2e69(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2eb9(%rip),%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm3
movsd  0x2ea1(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm3
movsd  0x2e81(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm3
movsd  0x2e61(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm3
movsd  0x2e41(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm3
movsd  0x2e21(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xdb5(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2e8d(%rip)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  0x2e7d(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,0x2e56(%rip)
movsd  0x2e4e(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    13fd <gamln1+0x2fd>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xd5c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xd50(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2e2c(%rip)
movsd  0x2ddc(%rip),%xmm0
movsd  0x2e1c(%rip),%xmm2
movsd  0x2dc4(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2e04(%rip),%xmm2
movsd  0x2da4(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2dec(%rip),%xmm2
movsd  0x2d84(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2dd4(%rip),%xmm2
movsd  0x2d64(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2dbc(%rip),%xmm2
movsd  0x2d44(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x2d84(%rip),%xmm1
movsd  0x2d9c(%rip),%xmm3
movsd  0x2d6c(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x2d84(%rip),%xmm3
movsd  0x2d4c(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x2d6c(%rip),%xmm3
movsd  0x2d2c(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x2d54(%rip),%xmm3
movsd  0x2d0c(%rip),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x2d3c(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc40(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2d18(%rip)
movsd  0x2d18(%rip),%xmm0
mulsd  0x2d08(%rip),%xmm0
movsd  %xmm0,0x2cf8(%rip)
movsd  0x2cf0(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<gamln1>:
movsd  (%rdi),%xmm0
ucomisd 0xef4(%rip),%xmm0
jae    117f <gamln1+0x7f>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xf52(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf56(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf5a(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf5e(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf62(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf66(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf6a(%rip),%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
divsd  %xmm1,%xmm2
xorpd  0xf66(%rip),%xmm0
mulsd  %xmm2,%xmm0
ret
movsd  0xe81(%rip),%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xe71(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe75(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe79(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe7d(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe81(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe85(%rip),%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
divsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm0
ret

LLVM IR (-O0):
@gamln1.p0 = internal global double 0x3FE2788CFC6FB61A
@gamln1.p1 = internal global double 0x3FEB03B7F19E5EB3
@gamln1.p2 = internal global double 0xBFC59D3953A5D4DE
@gamln1.p3 = internal global double 0xBFE8F94355B395CA
@gamln1.p4 = internal global double 0xBFD9BB483F4D2A05
@gamln1.p5 = internal global double 0xBFB13E41E03C299D
@gamln1.p6 = internal global double 0xBF6646E7B7A2C01C
@gamln1.q1 = internal global double 0x40071975ECB828DC
@gamln1.q2 = internal global double 0x40090539668BBEEE
@gamln1.q3 = internal global double 0x3FF9199BA078F07A
@gamln1.q4 = internal global double 0x3FD72A38AE0D50C1
@gamln1.q5 = internal global double 0x3FA0A45975D0DEFB
@gamln1.q6 = internal global double 0x3F45DF1B8080E82C
@gamln1.r0 = internal global double 0x3FDB0EE6072093CC
@gamln1.r1 = internal global double 0x3FEB232E759F30F9
@gamln1.r2 = internal global double 0x3FE2164A74F7718B
@gamln1.r3 = internal global double 0x3FC4089EB617E2B8
@gamln1.r4 = internal global double 0x3F91759ECD1B09C3
@gamln1.r5 = internal global double 0x3F40512D1BB91A1E
@gamln1.s1 = internal global double 0x3FF3E3E079D48DD8
@gamln1.s2 = internal global double 0x3FE1898F9B51F5EA
@gamln1.s3 = internal global double 0x3FB9FF52FBE42E52
@gamln1.s4 = internal global double 0x3F7D3797E9248701
@gamln1.s5 = internal global double 0x3F1E73BBAE6309A9
@gamln1.gamln1 = internal global double 0.000000e+00
@gamln1.w = internal global double 0.000000e+00
@gamln1.x = internal global double 0.000000e+00
define double @gamln1(double* %0) {
%2 = alloca double
%3 = alloca double*
store double* %0, double** %3
%4 = load double*, double** %3
%5 = load double, double* %4
%6 = fcmp oge double %5, 6.000000e-01
br i1 %6, label %7, label %8
7: ; preds = %1
br label %65
8: ; preds = %1
%9 = load double, double* @gamln1.p6
%10 = load double*, double** %3
%11 = load double, double* %10
%12 = load double, double* @gamln1.p5
%13 = call double @llvm.fmuladd.f64(double %9, double %11, double %12)
%14 = load double*, double** %3
%15 = load double, double* %14
%16 = load double, double* @gamln1.p4
%17 = call double @llvm.fmuladd.f64(double %13, double %15, double %16)
%18 = load double*, double** %3
%19 = load double, double* %18
%20 = load double, double* @gamln1.p3
%21 = call double @llvm.fmuladd.f64(double %17, double %19, double %20)
%22 = load double*, double** %3
%23 = load double, double* %22
%24 = load double, double* @gamln1.p2
%25 = call double @llvm.fmuladd.f64(double %21, double %23, double %24)
%26 = load double*, double** %3
%27 = load double, double* %26
%28 = load double, double* @gamln1.p1
%29 = call double @llvm.fmuladd.f64(double %25, double %27, double %28)
%30 = load double*, double** %3
%31 = load double, double* %30
%32 = load double, double* @gamln1.p0
%33 = call double @llvm.fmuladd.f64(double %29, double %31, double %32)
%34 = load double, double* @gamln1.q6
%35 = load double*, double** %3
%36 = load double, double* %35
%37 = load double, double* @gamln1.q5
%38 = call double @llvm.fmuladd.f64(double %34, double %36, double %37)
%39 = load double*, double** %3
%40 = load double, double* %39
%41 = load double, double* @gamln1.q4
%42 = call double @llvm.fmuladd.f64(double %38, double %40, double %41)
%43 = load double*, double** %3
%44 = load double, double* %43
%45 = load double, double* @gamln1.q3
%46 = call double @llvm.fmuladd.f64(double %42, double %44, double %45)
%47 = load double*, double** %3
%48 = load double, double* %47
%49 = load double, double* @gamln1.q2
%50 = call double @llvm.fmuladd.f64(double %46, double %48, double %49)
%51 = load double*, double** %3
%52 = load double, double* %51
%53 = load double, double* @gamln1.q1
%54 = call double @llvm.fmuladd.f64(double %50, double %52, double %53)
%55 = load double*, double** %3
%56 = load double, double* %55
%57 = call double @llvm.fmuladd.f64(double %54, double %56, double 1.000000e+00)
%58 = fdiv double %33, %57
store double %58, double* @gamln1.w
%59 = load double*, double** %3
%60 = load double, double* %59
%61 = load double, double* @gamln1.w
%62 = fmul double %60, %61
%63 = fneg double %62
store double %63, double* @gamln1.gamln1
%64 = load double, double* @gamln1.gamln1
store double %64, double* %2
br label %106
65: ; preds = %7
%66 = load double*, double** %3
%67 = load double, double* %66
%68 = fsub double %67, 5.000000e-01
%69 = fsub double %68, 5.000000e-01
store double %69, double* @gamln1.x
%70 = load double, double* @gamln1.r5
%71 = load double, double* @gamln1.x
%72 = load double, double* @gamln1.r4
%73 = call double @llvm.fmuladd.f64(double %70, double %71, double %72)
%74 = load double, double* @gamln1.x
%75 = load double, double* @gamln1.r3
%76 = call double @llvm.fmuladd.f64(double %73, double %74, double %75)
%77 = load double, double* @gamln1.x
%78 = load double, double* @gamln1.r2
%79 = call double @llvm.fmuladd.f64(double %76, double %77, double %78)
%80 = load double, double* @gamln1.x
%81 = load double, double* @gamln1.r1
%82 = call double @llvm.fmuladd.f64(double %79, double %80, double %81)
%83 = load double, double* @gamln1.x
%84 = load double, double* @gamln1.r0
%85 = call double @llvm.fmuladd.f64(double %82, double %83, double %84)
%86 = load double, double* @gamln1.s5
%87 = load double, double* @gamln1.x
%88 = load double, double* @gamln1.s4
%89 = call double @llvm.fmuladd.f64(double %86, double %87, double %88)
%90 = load double, double* @gamln1.x
%91 = load double, double* @gamln1.s3
%92 = call double @llvm.fmuladd.f64(double %89, double %90, double %91)
%93 = load double, double* @gamln1.x
%94 = load double, double* @gamln1.s2
%95 = call double @llvm.fmuladd.f64(double %92, double %93, double %94)
%96 = load double, double* @gamln1.x
%97 = load double, double* @gamln1.s1
%98 = call double @llvm.fmuladd.f64(double %95, double %96, double %97)
%99 = load double, double* @gamln1.x
%100 = call double @llvm.fmuladd.f64(double %98, double %99, double 1.000000e+00)
%101 = fdiv double %85, %100
store double %101, double* @gamln1.w
%102 = load double, double* @gamln1.x
%103 = load double, double* @gamln1.w
%104 = fmul double %102, %103
store double %104, double* @gamln1.gamln1
%105 = load double, double* @gamln1.gamln1
store double %105, double* %2
br label %106
106: ; preds = %65, %8
%107 = load double, double* %2
ret double %107
}

LLVM IR (-O2):
define double @gamln1(double* nocapture %0) {
%2 = load double, double* %0
%3 = fcmp ult double %2, 6.000000e-01
br i1 %3, label %4, label %18
4: ; preds = %1
%5 = insertelement <2 x double> poison, double %2, i64 0
%6 = shufflevector <2 x double> %5, <2 x double> poison, <2 x i32> zeroinitializer
%7 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %6, <2 x double> <double 0xBF6646E7B7A2C01C, double 0x3F45DF1B8080E82C>, <2 x double> <double 0xBFB13E41E03C299D, double 0x3FA0A45975D0DEFB>)
%8 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %7, <2 x double> %6, <2 x double> <double 0xBFD9BB483F4D2A05, double 0x3FD72A38AE0D50C1>)
%9 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %8, <2 x double> %6, <2 x double> <double 0xBFE8F94355B395CA, double 0x3FF9199BA078F07A>)
%10 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %9, <2 x double> %6, <2 x double> <double 0xBFC59D3953A5D4DE, double 0x40090539668BBEEE>)
%11 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %10, <2 x double> %6, <2 x double> <double 0x3FEB03B7F19E5EB3, double 0x40071975ECB828DC>)
%12 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %11, <2 x double> %6, <2 x double> <double 0x3FE2788CFC6FB61A, double 1.000000e+00>)
%13 = extractelement <2 x double> %12, i64 0
%14 = extractelement <2 x double> %12, i64 1
%15 = fdiv double %13, %14
%16 = fneg double %2
%17 = fmul double %15, %16
br label %32
18: ; preds = %1
%19 = fadd double %2, -5.000000e-01
%20 = fadd double %19, -5.000000e-01
%21 = insertelement <2 x double> poison, double %20, i64 0
%22 = shufflevector <2 x double> %21, <2 x double> poison, <2 x i32> zeroinitializer
%23 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %22, <2 x double> <double 0x3F40512D1BB91A1E, double 0x3F1E73BBAE6309A9>, <2 x double> <double 0x3F91759ECD1B09C3, double 0x3F7D3797E9248701>)
%24 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %23, <2 x double> %22, <2 x double> <double 0x3FC4089EB617E2B8, double 0x3FB9FF52FBE42E52>)
%25 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %24, <2 x double> %22, <2 x double> <double 0x3FE2164A74F7718B, double 0x3FE1898F9B51F5EA>)
%26 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %25, <2 x double> %22, <2 x double> <double 0x3FEB232E759F30F9, double 0x3FF3E3E079D48DD8>)
%27 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %26, <2 x double> %22, <2 x double> <double 0x3FDB0EE6072093CC, double 1.000000e+00>)
%28 = extractelement <2 x double> %27, i64 0
%29 = extractelement <2 x double> %27, i64 1
%30 = fdiv double %28, %29
%31 = fmul double %20, %30
br label %32
32: ; preds = %18, %4
%33 = phi double [ %31, %18 ], [ %17, %4 ]
ret double %33
}