#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 */
typedef int /*<<< orphan*/ nzetan;
typedef int /*<<< orphan*/ koeff;
typedef int /*<<< orphan*/ kLim;

/* Variables and functions */
double exp(double const);
double pow(double const, int const);
double debyen(const double x, const int n) {
  if (x <= 0.)
    return 0.;
  if (n < 1 || n > 20)
    return -1.;
  if (x >= 3.) {
    double sum;
    static double nzetan[] = {0.,
                              1.64493406684822643647241516665e+00,
                              2.40411380631918857079947632302e+00,
                              6.49393940226682914909602217926e+00,
                              2.48862661234408782319527716750e+01,
                              1.22081167438133896765742151575e+02,
                              7.26011479714984435324654235892e+02,
                              5.06054987523763947046857360209e+03,
                              4.04009783987476348853278236554e+04,
                              3.63240911422382626807143525567e+05,
                              3.63059331160662871299061884284e+06,
                              3.99266229877310867023270732405e+07,
                              4.79060379889831452426876764501e+08,
                              6.22740219341097176419285340896e+09,
                              8.71809578301720678451912203103e+10,
                              1.30769435221891382089009990749e+12,
                              2.09229496794815109066316556880e+13,
                              3.55688785859223715975612396717e+14,
                              6.40238592281892140073564945334e+15,
                              1.21645216453639396669876696274e+17,
                              2.43290316850786132173725681824e+18,
                              5.10909543543702856776502748606e+19,
                              1.12400086178089123060215294900e+21};
    if (n >= sizeof(nzetan) / sizeof(double))
      return -1.;
    sum = nzetan[n];
    static int kLim[] = {0, 0, 0, 13, 10, 8, 7, 6, 5, 5, 4, 4, 4, 3};
    const int kmax = ((int)x < sizeof(kLim) / sizeof(int)) ? kLim[(int)x] : 3;
    int k;
    for (k = 1; k <= kmax; k++) {
      const double xk = x * k;
      double ksum = 1. / xk;
      double tmp = n * ksum / xk;
      int s;
      for (s = 1; s <= n; s++) {
        ksum += tmp;
        tmp *= (n - s) / xk;
      }
      sum -= exp(-xk) * ksum * pow(x, n + 1.);
    }
    return sum;
  } else {
    static double koeff[] = {0.,
                             1.289868133696452872944830333292e+00,
                             1.646464674222763830320073930823e-01,
                             3.468612396889827942903585958184e-02,
                             8.154712395888678757370477017305e-03,
                             1.989150255636170674291917800638e-03,
                             4.921731066160965972759960954793e-04,
                             1.224962701174096585170902102707e-04,
                             3.056451881730374346514297527344e-05,
                             7.634586529999679712923289243879e-06,
                             1.907924067745592226304077366899e-06,
                             4.769010054554659800072963735060e-07,
                             1.192163781025189592248804158716e-07,
                             2.980310965673008246931701326140e-08,
                             7.450668049576914109638408036805e-09,
                             1.862654864839336365743529470042e-09,
                             4.656623667353010984002911951881e-10,
                             1.164154417580540177848737197821e-10,
                             2.910384378208396847185926449064e-11,
                             7.275959094757302380474472711747e-12,
                             1.818989568052777856506623677390e-12,
                             4.547473691649305030453643155957e-13,
                             1.136868397525517121855436593505e-13,
                             2.842170965606321353966861428348e-14,
                             7.105427382674227346596939068119e-15,
                             1.776356842186163180619218277278e-15,
                             4.440892101596083967998640188409e-16,
                             1.110223024969096248744747318102e-16,
                             2.775557561945046552567818981300e-17,
                             6.938893904331845249488542992219e-18,
                             1.734723476023986745668411013469e-18,
                             4.336808689994439570027820336642e-19,
                             1.084202172491329082183740080878e-19,
                             2.710505431220232916297046799365e-20,
                             6.776263578041593636171406200902e-21,
                             1.694065894509399669649398521836e-21,
                             4.235164736272389463688418879636e-22,
                             1.058791184067974064762782460584e-22,
                             2.646977960169798160618902050189e-23,
                             6.617444900424343177893912768629e-24,
                             1.654361225106068880734221123349e-24,
                             4.135903062765153408791935838694e-25,
                             1.033975765691286264082026643327e-25,
                             2.584939414228213340076225223666e-26,
                             6.462348535570530772269628236053e-27,
                             1.615587133892632406631747637268e-27,
                             4.038967834731580698317525293132e-28,
                             1.009741958682895139216954234507e-28,
                             2.524354896707237808750799932127e-29,
                             6.310887241768094478219682436680e-30,
                             1.577721810442023614704107565240e-30,
                             3.944304526105059031370476640000e-31,
                             9.860761315262647572437533499000e-32,
                             2.465190328815661892443976898000e-32,
                             6.162975822039154730370601500000e-33,
                             1.540743955509788682510501190000e-33,
                             3.851859888774471706184973900000e-34,
                             9.629649721936179265360991000000e-35,
                             2.407412430484044816328953000000e-35,
                             6.018531076210112040809600000000e-36,
                             1.504632769052528010200750000000e-36,
                             3.761581922631320025497600000000e-37,
                             9.403954806578300063715000000000e-38,
                             2.350988701644575015901000000000e-38,
                             5.877471754111437539470000000000e-39,
                             1.469367938527859384580000000000e-39,
                             3.673419846319648458500000000000e-40,
                             9.183549615799121117000000000000e-41,
                             2.295887403949780249000000000000e-41,
                             5.739718509874450320000000000000e-42,
                             1.434929627468612270000000000000e-42};
    double sum = 0.;
    const double x2pi = x * .159154943091895335768883763373;
    int k;
    for (k = 1; k < sizeof(koeff) / sizeof(double) - 1; k++) {
      const double sumold = sum;
      sum += (2. + koeff[k]) * pow(x2pi, 2. * k) / (2 * k + n);
      k++;
      sum -= (2. + koeff[k]) * pow(x2pi, 2. * k) / (2 * k + n);
      if (sum == sumold)
        break;
    }
    sum += 1. / n - x / (2 * (1 + n));
    return sum * pow(x, (double)n);
  }
}


x86 assembly (clang, -O0):
<debyen>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movsd  %xmm0,-0x10(%rbp)
mov    %edi,-0x14(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     114e <debyen+0x2e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14d1 <debyen+0x3b1>
cmpl   $0x1,-0x14(%rbp)
jl     1162 <debyen+0x42>
cmpl   $0x14,-0x14(%rbp)
jle    1174 <debyen+0x54>
movsd  0xeb6(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14d1 <debyen+0x3b1>
movsd  -0x10(%rbp),%xmm0
movsd  0xe7f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     132b <debyen+0x20b>
movslq -0x14(%rbp),%rax
cmp    $0x17,%rax
jb     11ab <debyen+0x8b>
movsd  0xe7f(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14d1 <debyen+0x3b1>
movslq -0x14(%rbp),%rcx
lea    0x2e8a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x20(%rbp)
cvttsd2si -0x10(%rbp),%eax
cltq
cmp    $0xe,%rax
jae    11eb <debyen+0xcb>
cvttsd2si -0x10(%rbp),%eax
movslq %eax,%rcx
lea    0x2f20(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x6c(%rbp)
jmp    11f8 <debyen+0xd8>
mov    $0x3,%eax
mov    %eax,-0x6c(%rbp)
jmp    11f8 <debyen+0xd8>
mov    -0x6c(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jg     131c <debyen+0x1fc>
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xdec(%rip),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
cvtsi2sdl -0x14(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     1293 <debyen+0x173>
movsd  -0x40(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x44(%rbp),%eax
cvtsi2sd %eax,%xmm0
divsd  -0x30(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1251 <debyen+0x131>
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1030 <exp@plt>
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
movsd  0xd48(%rip),%xmm2
addsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1040 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x78(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1205 <debyen+0xe5>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14d1 <debyen+0x3b1>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xccd(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x5c(%rbp)
movslq -0x5c(%rbp),%rax
cmp    $0x46,%rax
jae    1468 <debyen+0x348>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movslq -0x5c(%rbp),%rcx
movsd  0xca0(%rip),%xmm0
lea    0x2dc9(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl -0x5c(%rbp),%xmm2
movsd  0xc7a(%rip),%xmm1
mulsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
mov    -0x5c(%rbp),%eax
shl    $0x1,%eax
add    -0x14(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
movslq -0x5c(%rbp),%rcx
movsd  0xc2e(%rip),%xmm0
lea    0x2d57(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl -0x5c(%rbp),%xmm2
movsd  0xc0b(%rip),%xmm1
mulsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   1040 <pow@plt>
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm0,%xmm1
mov    -0x5c(%rbp),%eax
shl    $0x1,%eax
add    -0x14(%rbp),%eax
cvtsi2sd %eax,%xmm0
divsd  %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
ucomisd -0x68(%rbp),%xmm0
jne    1455 <debyen+0x335>
jp     1455 <debyen+0x335>
jmp    1468 <debyen+0x348>
jmp    145a <debyen+0x33a>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    134c <debyen+0x22c>
cvtsi2sdl -0x14(%rbp),%xmm1
movsd  0xba3(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x14(%rbp),%eax
add    $0x1,%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
cvttsd2si %xmm1,%edi
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<debyen>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
xorpd  %xmm2,%xmm2
ucomisd %xmm0,%xmm2
jae    12cf <debyen+0x1af>
mov    %edi,%r12d
lea    -0x15(%r12),%eax
cmp    $0xffffffec,%eax
jae    1156 <debyen+0x36>
movsd  0xeaf(%rip),%xmm2
jmp    12cf <debyen+0x1af>
movapd %xmm0,%xmm1
ucomisd 0xea6(%rip),%xmm0
movapd %xmm0,0x20(%rsp)
jae    12ac <debyen+0x18c>
movsd  0xea2(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsp)
movd   %r12d,%xmm0
movdqa %xmm0,0x40(%rsp)
pshufd $0x50,%xmm0,%xmm0
movdqa %xmm0,0x50(%rsp)
xorpd  %xmm2,%xmm2
mov    $0x1,%ebx
mov    $0x2,%ebp
lea    0xfa5(%rip),%r14
nopl   0x0(%rax,%rax,1)
movsd  %xmm2,0x8(%rsp)
movsd  %xmm2,(%rsp)
movsd  0x10(%rsp),%xmm0
mov    %ebp,%edi
call   1040 <pow@plt>
movaps %xmm0,0x30(%rsp)
movupd (%r14,%rbx,8),%xmm0
addpd  0xe55(%rip),%xmm0
movapd %xmm0,0x60(%rsp)
lea    0x2(%rbp),%edi
movsd  0x10(%rsp),%xmm0
call   1040 <pow@plt>
movsd  0x8(%rsp),%xmm2
movapd 0x30(%rsp),%xmm3
unpcklpd %xmm0,%xmm3
mulpd  0x60(%rsp),%xmm3
movd   %ebx,%xmm0
lea    0x1(%rbx),%eax
movd   %eax,%xmm1
punpckldq %xmm1,%xmm0
paddd  %xmm0,%xmm0
paddd  0x50(%rsp),%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm3,%xmm1
divpd  %xmm0,%xmm1
addsd  %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
subsd  %xmm1,%xmm2
ucomisd (%rsp),%xmm2
jne    123f <debyen+0x11f>
jnp    1253 <debyen+0x133>
add    $0x4,%ebp
lea    0x2(%rbx),%rax
cmp    $0x44,%rbx
mov    %rax,%rbx
jb     11b0 <debyen+0x90>
lea    (%r12,%r12,1),%eax
add    $0x2,%eax
movd   %eax,%xmm0
movdqa 0x40(%rsp),%xmm1
punpckldq %xmm0,%xmm1
cvtdq2pd %xmm1,%xmm1
movapd 0xdcc(%rip),%xmm3
movapd 0x20(%rsp),%xmm0
unpcklpd %xmm0,%xmm3
divpd  %xmm1,%xmm3
movapd %xmm3,%xmm1
unpckhpd %xmm3,%xmm1
subsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
movapd %xmm3,0x10(%rsp)
mov    %r12d,%edi
call   1040 <pow@plt>
movapd %xmm0,%xmm2
mulsd  0x10(%rsp),%xmm2
jmp    12cf <debyen+0x1af>
mov    %r12d,%eax
lea    0xd9a(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm2
cvttsd2si %xmm1,%eax
mov    $0x3,%r14d
cmp    $0xd,%eax
ja     12ef <debyen+0x1cf>
cmp    $0x3,%eax
jae    12e2 <debyen+0x1c2>
movapd %xmm2,%xmm0
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %eax,%eax
lea    0xe25(%rip),%rcx
mov    (%rcx,%rax,4),%r14d
cvtsi2sd %r12d,%xmm3
movsd  0xd14(%rip),%xmm0
movsd  %xmm3,0x30(%rsp)
addsd  %xmm3,%xmm0
cvttsd2si %xmm0,%r13d
mov    %r12d,%r15d
and    $0xfffffffe,%r15d
lea    -0x2(%r12),%ebx
mov    $0x1,%ebp
jmp    1377 <debyen+0x257>
xchg   %ax,%ax
movsd  %xmm3,0x8(%rsp)
xorpd  0xcf2(%rip),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,(%rsp)
movapd 0x20(%rsp),%xmm0
mov    %r13d,%edi
call   1040 <pow@plt>
movapd 0x20(%rsp),%xmm1
movsd  (%rsp),%xmm2
mulsd  0x8(%rsp),%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm2,%xmm0
movsd  0x10(%rsp),%xmm2
subsd  %xmm0,%xmm2
lea    0x1(%rbp),%eax
cmp    %r14d,%ebp
mov    %eax,%ebp
je     12cf <debyen+0x1af>
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc86(%rip),%xmm3
divsd  %xmm0,%xmm3
movapd %xmm3,%xmm1
mulsd  0x30(%rsp),%xmm1
divsd  %xmm0,%xmm1
cmp    $0x1,%r12d
movsd  %xmm2,0x10(%rsp)
je     13e1 <debyen+0x2c1>
mov    %r15d,%eax
mov    %ebx,%ecx
nopl   (%rax)
addsd  %xmm1,%xmm3
lea    0x1(%rcx),%edx
xorps  %xmm2,%xmm2
cvtsi2sd %edx,%xmm2
divsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm2,%xmm3
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
divsd  %xmm0,%xmm1
mulsd  %xmm2,%xmm1
add    $0xfffffffe,%ecx
add    $0xfffffffe,%eax
jne    13b0 <debyen+0x290>
test   $0x1,%r12b
je     1320 <debyen+0x200>
addsd  %xmm1,%xmm3
jmp    1320 <debyen+0x200>

LLVM IR (-O0):
@debyen.nzetan = internal global [23 x double] [double 0.000000e+00, double 0x3FFA51A6625307D3, double 0x40033BA004F00621, double 0x4019F9CB402BC46C, double 0x4038E2E2562FBB35, double 0x405E8531D8E91241, double 0x4086B01782AD4368, double 0x40B3C48CC49FA28B, double 0x40E3BA1F4F0AE3F1, double 0x41162BA3A54BE8B9, double 0x414BB300A7E2B9DC, double 0x418309DAF7E6DF8E, double 0x41BC8DE19BE3CBFE, double 0x41F732E9DD169357, double 0x42344C63D8862C0D, double 0x4273078A8475AE9F, double 0x42B30780FBB97983, double 0x42F437F3FBB5297B, double 0x4336BEEFA2A50369, double 0x437B02BAE0B583CE, double 0x43C0E1B44555EAAD, double 0x4406283C4259BF81, double 0x444E77529E49F97B]
@debyen.kLim = internal global [14 x i32] [i32 0, i32 0, i32 0, i32 13, i32 10, i32 8, i32 7, i32 6, i32 5, i32 5, i32 4, i32 4, i32 4, i32 3]
@debyen.koeff = internal global [71 x double] [double 0.000000e+00, double 0x3FF4A34CC4A60FA6, double 0x3FC51322AC7D8483, double 0x3FA1C26130249124, double 0x3F80B36AF86396E9, double 0x3F604B8CE96EE5F8, double 0x3F4020A5B2CD3042, double 0x3F200E4AF2B4E156, double 0x3F00064CDEB22F0F, double 0x3EE002C9953744CC, double 0x3EC0013C594466EA, double 0x3EA0008C66CEC77D, double 0x3E80003E59FFDE12, double 0x3E60001BB316CCDA, double 0x3E40000C4ED05AE3, double 0x3E200005782AAEBE, double 0x3E0000026E3F644F, double 0x3DE00001148AD653, double 0x3DC000007AE797FF, double 0x3DA00000369F9FF9, double 0x3D8000001846E551, double 0x3D6000000ACA29EB, double 0x3D40000004CBA013, double 0x3D20000002219C49, double 0x3D00000000F27E4D, double 0x3CE00000006BC658, double 0x3CC00000002FE65F, double 0x3CA00000001549F1, double 0x3C80000000097632, double 0x3C60000000043488, double 0x3C4000000001DE75, double 0x3C2000000000D4A6, double 0x3C00000000005E83, double 0x3BE0000000002A01, double 0x3BC00000000012AB, double 0x3BA000000000084C, double 0x3B800000000003B0, double 0x3B600000000001A4, double 0x3B400000000000BA, double 0x3B20000000000053, double 0x3B00000000000025, double 0x3AE0000000000010, double 0x3AC0000000000007, double 0x3AA0000000000003, double 0x3A80000000000001, double 0x3A60000000000001, double 0x3A40000000000000, double 0x3A20000000000000, double 0x3A00000000000000, double 0x39E0000000000000, double 0x39C0000000000000, double 0x39A0000000000000, double 0x3980000000000000, double 0x3960000000000000, double 0x3940000000000000, double 0x3920000000000000, double 0x3900000000000000, double 0x38E0000000000000, double 0x38C0000000000000, double 0x38A0000000000000, double 0x3880000000000000, double 0x3860000000000000, double 0x3840000000000000, double 0x3820000000000000, double 0x3800000000000000, double 0x37E0000000000000, double 0x37C0000000000000, double 0x37A0000000000000, double 0x3780000000000000, double 0x375FFFFFFFFFFFFF, double 0x373FFFFFFFFFFFFD]
define double @debyen(double %0, i32 %1) {
%3 = alloca double
%4 = alloca double
%5 = alloca i32
%6 = alloca double
%7 = alloca i32
%8 = alloca i32
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca i32
%13 = alloca double
%14 = alloca double
%15 = alloca i32
%16 = alloca double
store double %0, double* %4
store i32 %1, i32* %5
%17 = load double, double* %4
%18 = fcmp ole double %17, 0.000000e+00
br i1 %18, label %19, label %20
19: ; preds = %2
store double 0.000000e+00, double* %3
br label %188
20: ; preds = %2
%21 = load i32, i32* %5
%22 = icmp slt i32 %21, 1
br i1 %22, label %26, label %23
23: ; preds = %20
%24 = load i32, i32* %5
%25 = icmp sgt i32 %24, 20
br i1 %25, label %26, label %27
26: ; preds = %23, %20
store double -1.000000e+00, double* %3
br label %188
27: ; preds = %23
%28 = load double, double* %4
%29 = fcmp oge double %28, 3.000000e+00
br i1 %29, label %30, label %109
30: ; preds = %27
%31 = load i32, i32* %5
%32 = sext i32 %31 to i64
%33 = icmp uge i64 %32, 23
br i1 %33, label %34, label %35
34: ; preds = %30
store double -1.000000e+00, double* %3
br label %188
35: ; preds = %30
%36 = load i32, i32* %5
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [23 x double], [23 x double]* @debyen.nzetan, i64 0, i64 %37
%39 = load double, double* %38
store double %39, double* %6
%40 = load double, double* %4
%41 = fptosi double %40 to i32
%42 = sext i32 %41 to i64
%43 = icmp ult i64 %42, 14
br i1 %43, label %44, label %50
44: ; preds = %35
%45 = load double, double* %4
%46 = fptosi double %45 to i32
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [14 x i32], [14 x i32]* @debyen.kLim, i64 0, i64 %47
%49 = load i32, i32* %48
br label %51
50: ; preds = %35
br label %51
51: ; preds = %50, %44
%52 = phi i32 [ %49, %44 ], [ 3, %50 ]
store i32 %52, i32* %7
store i32 1, i32* %8
br label %53
53: ; preds = %104, %51
%54 = load i32, i32* %8
%55 = load i32, i32* %7
%56 = icmp sle i32 %54, %55
br i1 %56, label %57, label %107
57: ; preds = %53
%58 = load double, double* %4
%59 = load i32, i32* %8
%60 = sitofp i32 %59 to double
%61 = fmul double %58, %60
store double %61, double* %9
%62 = load double, double* %9
%63 = fdiv double 1.000000e+00, %62
store double %63, double* %10
%64 = load i32, i32* %5
%65 = sitofp i32 %64 to double
%66 = load double, double* %10
%67 = fmul double %65, %66
%68 = load double, double* %9
%69 = fdiv double %67, %68
store double %69, double* %11
store i32 1, i32* %12
br label %70
70: ; preds = %86, %57
%71 = load i32, i32* %12
%72 = load i32, i32* %5
%73 = icmp sle i32 %71, %72
br i1 %73, label %74, label %89
74: ; preds = %70
%75 = load double, double* %11
%76 = load double, double* %10
%77 = fadd double %76, %75
store double %77, double* %10
%78 = load i32, i32* %5
%79 = load i32, i32* %12
%80 = sub nsw i32 %78, %79
%81 = sitofp i32 %80 to double
%82 = load double, double* %9
%83 = fdiv double %81, %82
%84 = load double, double* %11
%85 = fmul double %84, %83
store double %85, double* %11
br label %86
86: ; preds = %74
%87 = load i32, i32* %12
%88 = add nsw i32 %87, 1
store i32 %88, i32* %12
br label %70
89: ; preds = %70
%90 = load double, double* %9
%91 = fneg double %90
%92 = call double @exp(double %91)
%93 = load double, double* %10
%94 = fmul double %92, %93
%95 = load double, double* %4
%96 = load i32, i32* %5
%97 = sitofp i32 %96 to double
%98 = fadd double %97, 1.000000e+00
%99 = fptosi double %98 to i32
%100 = call double @pow(double %95, i32 %99)
%101 = load double, double* %6
%102 = fneg double %94
%103 = call double @llvm.fmuladd.f64(double %102, double %100, double %101)
store double %103, double* %6
br label %104
104: ; preds = %89
%105 = load i32, i32* %8
%106 = add nsw i32 %105, 1
store i32 %106, i32* %8
br label %53
107: ; preds = %53
%108 = load double, double* %6
store double %108, double* %3
br label %188
109: ; preds = %27
store double 0.000000e+00, double* %13
%110 = load double, double* %4
%111 = fmul double %110, 0x3FC45F306DC9C883
store double %111, double* %14
store i32 1, i32* %15
br label %112
112: ; preds = %165, %109
%113 = load i32, i32* %15
%114 = sext i32 %113 to i64
%115 = icmp ult i64 %114, 70
br i1 %115, label %116, label %168
116: ; preds = %112
%117 = load double, double* %13
store double %117, double* %16
%118 = load i32, i32* %15
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds [71 x double], [71 x double]* @debyen.koeff, i64 0, i64 %119
%121 = load double, double* %120
%122 = fadd double 2.000000e+00, %121
%123 = load double, double* %14
%124 = load i32, i32* %15
%125 = sitofp i32 %124 to double
%126 = fmul double 2.000000e+00, %125
%127 = fptosi double %126 to i32
%128 = call double @pow(double %123, i32 %127)
%129 = fmul double %122, %128
%130 = load i32, i32* %15
%131 = mul nsw i32 2, %130
%132 = load i32, i32* %5
%133 = add nsw i32 %131, %132
%134 = sitofp i32 %133 to double
%135 = fdiv double %129, %134
%136 = load double, double* %13
%137 = fadd double %136, %135
store double %137, double* %13
%138 = load i32, i32* %15
%139 = add nsw i32 %138, 1
store i32 %139, i32* %15
%140 = load i32, i32* %15
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds [71 x double], [71 x double]* @debyen.koeff, i64 0, i64 %141
%143 = load double, double* %142
%144 = fadd double 2.000000e+00, %143
%145 = load double, double* %14
%146 = load i32, i32* %15
%147 = sitofp i32 %146 to double
%148 = fmul double 2.000000e+00, %147
%149 = fptosi double %148 to i32
%150 = call double @pow(double %145, i32 %149)
%151 = fmul double %144, %150
%152 = load i32, i32* %15
%153 = mul nsw i32 2, %152
%154 = load i32, i32* %5
%155 = add nsw i32 %153, %154
%156 = sitofp i32 %155 to double
%157 = fdiv double %151, %156
%158 = load double, double* %13
%159 = fsub double %158, %157
store double %159, double* %13
%160 = load double, double* %13
%161 = load double, double* %16
%162 = fcmp oeq double %160, %161
br i1 %162, label %163, label %164
163: ; preds = %116
br label %168
164: ; preds = %116
br label %165
165: ; preds = %164
%166 = load i32, i32* %15
%167 = add nsw i32 %166, 1
store i32 %167, i32* %15
br label %112
168: ; preds = %163, %112
%169 = load i32, i32* %5
%170 = sitofp i32 %169 to double
%171 = fdiv double 1.000000e+00, %170
%172 = load double, double* %4
%173 = load i32, i32* %5
%174 = add nsw i32 1, %173
%175 = mul nsw i32 2, %174
%176 = sitofp i32 %175 to double
%177 = fdiv double %172, %176
%178 = fsub double %171, %177
%179 = load double, double* %13
%180 = fadd double %179, %178
store double %180, double* %13
%181 = load double, double* %13
%182 = load double, double* %4
%183 = load i32, i32* %5
%184 = sitofp i32 %183 to double
%185 = fptosi double %184 to i32
%186 = call double @pow(double %182, i32 %185)
%187 = fmul double %181, %186
store double %187, double* %3
br label %188
188: ; preds = %168, %107, %34, %26, %19
%189 = load double, double* %3
ret double %189
}

LLVM IR (-O2):
@debyen.nzetan = internal unnamed_addr constant [23 x double] [double 0.000000e+00, double 0x3FFA51A6625307D3, double 0x40033BA004F00621, double 0x4019F9CB402BC46C, double 0x4038E2E2562FBB35, double 0x405E8531D8E91241, double 0x4086B01782AD4368, double 0x40B3C48CC49FA28B, double 0x40E3BA1F4F0AE3F1, double 0x41162BA3A54BE8B9, double 0x414BB300A7E2B9DC, double 0x418309DAF7E6DF8E, double 0x41BC8DE19BE3CBFE, double 0x41F732E9DD169357, double 0x42344C63D8862C0D, double 0x4273078A8475AE9F, double 0x42B30780FBB97983, double 0x42F437F3FBB5297B, double 0x4336BEEFA2A50369, double 0x437B02BAE0B583CE, double 0x43C0E1B44555EAAD, double 0x4406283C4259BF81, double 0x444E77529E49F97B]
@debyen.kLim = internal unnamed_addr constant [14 x i32] [i32 0, i32 0, i32 0, i32 13, i32 10, i32 8, i32 7, i32 6, i32 5, i32 5, i32 4, i32 4, i32 4, i32 3]
@debyen.koeff = internal unnamed_addr constant [71 x double] [double 0.000000e+00, double 0x3FF4A34CC4A60FA6, double 0x3FC51322AC7D8483, double 0x3FA1C26130249124, double 0x3F80B36AF86396E9, double 0x3F604B8CE96EE5F8, double 0x3F4020A5B2CD3042, double 0x3F200E4AF2B4E156, double 0x3F00064CDEB22F0F, double 0x3EE002C9953744CC, double 0x3EC0013C594466EA, double 0x3EA0008C66CEC77D, double 0x3E80003E59FFDE12, double 0x3E60001BB316CCDA, double 0x3E40000C4ED05AE3, double 0x3E200005782AAEBE, double 0x3E0000026E3F644F, double 0x3DE00001148AD653, double 0x3DC000007AE797FF, double 0x3DA00000369F9FF9, double 0x3D8000001846E551, double 0x3D6000000ACA29EB, double 0x3D40000004CBA013, double 0x3D20000002219C49, double 0x3D00000000F27E4D, double 0x3CE00000006BC658, double 0x3CC00000002FE65F, double 0x3CA00000001549F1, double 0x3C80000000097632, double 0x3C60000000043488, double 0x3C4000000001DE75, double 0x3C2000000000D4A6, double 0x3C00000000005E83, double 0x3BE0000000002A01, double 0x3BC00000000012AB, double 0x3BA000000000084C, double 0x3B800000000003B0, double 0x3B600000000001A4, double 0x3B400000000000BA, double 0x3B20000000000053, double 0x3B00000000000025, double 0x3AE0000000000010, double 0x3AC0000000000007, double 0x3AA0000000000003, double 0x3A80000000000001, double 0x3A60000000000001, double 0x3A40000000000000, double 0x3A20000000000000, double 0x3A00000000000000, double 0x39E0000000000000, double 0x39C0000000000000, double 0x39A0000000000000, double 0x3980000000000000, double 0x3960000000000000, double 0x3940000000000000, double 0x3920000000000000, double 0x3900000000000000, double 0x38E0000000000000, double 0x38C0000000000000, double 0x38A0000000000000, double 0x3880000000000000, double 0x3860000000000000, double 0x3840000000000000, double 0x3820000000000000, double 0x3800000000000000, double 0x37E0000000000000, double 0x37C0000000000000, double 0x37A0000000000000, double 0x3780000000000000, double 0x375FFFFFFFFFFFFF, double 0x373FFFFFFFFFFFFD]
define double @debyen(double %0, i32 %1) {
%3 = fcmp ugt double %0, 0.000000e+00
br i1 %3, label %4, label %123
4: ; preds = %2
%5 = add i32 %1, -21
%6 = icmp ult i32 %5, -20
br i1 %6, label %123, label %7
7: ; preds = %4
%8 = fcmp ult double %0, 3.000000e+00
br i1 %8, label %70, label %9
9: ; preds = %7
%10 = zext i32 %1 to i64
%11 = getelementptr inbounds [23 x double], [23 x double]* @debyen.nzetan, i64 0, i64 %10
%12 = load double, double* %11
%13 = fptosi double %0 to i32
%14 = icmp ult i32 %13, 14
br i1 %14, label %15, label %20
15: ; preds = %9
%16 = zext i32 %13 to i64
%17 = getelementptr inbounds [14 x i32], [14 x i32]* @debyen.kLim, i64 0, i64 %16
%18 = load i32, i32* %17
%19 = icmp ult i32 %13, 3
br i1 %19, label %123, label %20
20: ; preds = %9, %15
%21 = phi i32 [ %18, %15 ], [ 3, %9 ]
%22 = sitofp i32 %1 to double
%23 = fadd double %22, 1.000000e+00
%24 = fptosi double %23 to i32
%25 = and i32 %1, 1
%26 = icmp eq i32 %1, 1
%27 = and i32 %1, -2
%28 = icmp eq i32 %25, 0
br label %29
29: ; preds = %20, %56
%30 = phi double [ %12, %20 ], [ %67, %56 ]
%31 = phi i32 [ 1, %20 ], [ %68, %56 ]
%32 = sitofp i32 %31 to double
%33 = fmul double %32, %0
%34 = fdiv double 1.000000e+00, %33
%35 = fmul double %34, %22
%36 = fdiv double %35, %33
br i1 %26, label %56, label %37
37: ; preds = %29, %37
%38 = phi i32 [ %53, %37 ], [ 1, %29 ]
%39 = phi double [ %52, %37 ], [ %36, %29 ]
%40 = phi double [ %48, %37 ], [ %34, %29 ]
%41 = phi i32 [ %54, %37 ], [ 0, %29 ]
%42 = fadd double %40, %39
%43 = sub nsw i32 %1, %38
%44 = sitofp i32 %43 to double
%45 = fdiv double %44, %33
%46 = fmul double %39, %45
%47 = xor i32 %38, -1
%48 = fadd double %42, %46
%49 = add i32 %47, %1
%50 = sitofp i32 %49 to double
%51 = fdiv double %50, %33
%52 = fmul double %46, %51
%53 = add nuw i32 %38, 2
%54 = add i32 %41, 2
%55 = icmp eq i32 %54, %27
br i1 %55, label %56, label %37
56: ; preds = %37, %29
%57 = phi double [ undef, %29 ], [ %48, %37 ]
%58 = phi double [ %36, %29 ], [ %52, %37 ]
%59 = phi double [ %34, %29 ], [ %48, %37 ]
%60 = fadd double %59, %58
%61 = select i1 %28, double %57, double %60
%62 = fneg double %33
%63 = tail call double @exp(double %62)
%64 = tail call double @pow(double %0, i32 %24)
%65 = fneg double %63
%66 = fmul double %61, %65
%67 = tail call double @llvm.fmuladd.f64(double %66, double %64, double %30)
%68 = add nuw i32 %31, 1
%69 = icmp eq i32 %31, %21
br i1 %69, label %123, label %29
70: ; preds = %7
%71 = fmul double %0, 0x3FC45F306DC9C883
%72 = insertelement <2 x i32> poison, i32 %1, i64 0
%73 = shufflevector <2 x i32> %72, <2 x i32> poison, <2 x i32> zeroinitializer
br label %74
74: ; preds = %74, %70
%75 = phi i64 [ 1, %70 ], [ %106, %74 ]
%76 = phi double [ 0.000000e+00, %70 ], [ %104, %74 ]
%77 = getelementptr inbounds [71 x double], [71 x double]* @debyen.koeff, i64 0, i64 %75
%78 = load double, double* %77
%79 = trunc i64 %75 to i32
%80 = shl i32 %79, 1
%81 = tail call double @pow(double %71, i32 %80)
%82 = add nuw nsw i64 %75, 1
%83 = getelementptr inbounds [71 x double], [71 x double]* @debyen.koeff, i64 0, i64 %82
%84 = load double, double* %83
%85 = insertelement <2 x double> poison, double %78, i64 0
%86 = insertelement <2 x double> %85, double %84, i64 1
%87 = fadd <2 x double> %86, <double 2.000000e+00, double 2.000000e+00>
%88 = trunc i64 %82 to i32
%89 = shl i32 %88, 1
%90 = tail call double @pow(double %71, i32 %89)
%91 = insertelement <2 x double> poison, double %81, i64 0
%92 = insertelement <2 x double> %91, double %90, i64 1
%93 = fmul <2 x double> %87, %92
%94 = insertelement <2 x i64> poison, i64 %75, i64 0
%95 = insertelement <2 x i64> %94, i64 %82, i64 1
%96 = trunc <2 x i64> %95 to <2 x i32>
%97 = shl nuw nsw <2 x i32> %96, <i32 1, i32 1>
%98 = add <2 x i32> %97, %73
%99 = sitofp <2 x i32> %98 to <2 x double>
%100 = fdiv <2 x double> %93, %99
%101 = extractelement <2 x double> %100, i64 0
%102 = fadd double %76, %101
%103 = extractelement <2 x double> %100, i64 1
%104 = fsub double %102, %103
%105 = fcmp une double %104, %76
%106 = add nuw nsw i64 %75, 2
%107 = icmp ult i64 %75, 68
%108 = select i1 %105, i1 %107, i1 false
br i1 %108, label %74, label %109
109: ; preds = %74
%110 = shl i32 %1, 1
%111 = add i32 %110, 2
%112 = insertelement <2 x i32> poison, i32 %1, i64 0
%113 = insertelement <2 x i32> %112, i32 %111, i64 1
%114 = sitofp <2 x i32> %113 to <2 x double>
%115 = insertelement <2 x double> <double 1.000000e+00, double poison>, double %0, i64 1
%116 = fdiv <2 x double> %115, %114
%117 = shufflevector <2 x double> %116, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%118 = fsub <2 x double> %116, %117
%119 = extractelement <2 x double> %118, i64 0
%120 = fadd double %119, %104
%121 = tail call double @pow(double %0, i32 %1)
%122 = fmul double %120, %121
br label %123
123: ; preds = %56, %15, %4, %2, %109
%124 = phi double [ %122, %109 ], [ 0.000000e+00, %2 ], [ -1.000000e+00, %4 ], [ %12, %15 ], [ %67, %56 ]
ret double %124
}