#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 const exp(double);
double fabs(double);
double const sqrt(double);
double bessel_I1(double x) {
  int k;
  double w, t, y;
  const static double a[60] = {
      1.2787464404046789181e-10, 3.5705860060088241077e-9,
      9.961153761934733504e-8,   2.2395070088633043177e-6,
      4.0312466928887462346e-5,  5.6437387840203722356e-4,
      0.0059259259312934746096,  0.04444444444349900887,
      0.22222222222232042719,    0.66666666666666139867,
      1.0000000000000001106,     0.49999999999999999962,
      1.7281952384448634449e-10, 3.064720455997639013e-9,
      1.0237662138842827028e-7,  2.2299494417341498163e-6,
      4.0335364374929326943e-5,  5.6433440269141349899e-4,
      0.0059259754885893798654,  0.04444439941088039787,
      0.2222222511283502673,     0.66666665422146063244,
      1.0000000032274936821,     0.49999999961866867205,
      2.3216048939948030996e-10, 1.7443372702334489579e-9,
      1.1596478963485415499e-7,  2.1446755518623035147e-6,
      4.0697440347437076195e-5,  5.6324394900433192204e-4,
      0.0059283484996093060678,  0.044440673899150997921,
      0.2222263801685265786,     0.66666358151576732094,
      1.0000013834029985337,     0.49999971643129650249,
      3.1013758938255172562e-10, -8.4813676145611694984e-10,
      1.5544980187411802596e-7,  1.7811109378708045726e-6,
      4.2945322199060856985e-5,  5.5344850176852353639e-4,
      0.0059590327716950614802,  0.044371611097707060659,
      0.22233578241986401111,    0.6665474730046331531,
      1.0000756505206705927,     0.49997803664415994554,
      4.1214758313965020365e-10, -5.361331773534742944e-9,
      2.4661360807517345161e-7,  6.7144593918926723203e-7,
      5.1988027944945587571e-5,  5.0165568586065803067e-4,
      0.0061717530047005289953,  0.043745229577317251404,
      0.22363147971477747996,    0.6647546913111766024,
      1.0015686689447547657,     0.49941120439785391891};
  const static double b[70] = {
      6.6324787943143095845e-8, 4.5125928898466638619e-7,
      6.7937793134877246623e-6, 7.4580507871505926302e-5,
      7.6866382927334005919e-4, 0.0071185174803491859307,
      0.058721838073486424416,  0.42473949281714196041,
      2.6396965606282079123,    13.710008536637016903,
      57.158647688180932003,    179.46182892089389037,
      377.57997362398478619,    399.87313678256009819,
      1.7652713206027939711e-7, 1.1988179244834708057e-6,
      1.8037851545747139231e-5, 1.9775785516370314656e-4,
      0.0020354870702829387283, 0.0188221641910322536,
      0.15500485219010424263,   1.119010001056057321,
      6.9391565185406617552,    35.948170579648649345,
      149.41909525103032616,    467.42979492780642582,
      979.04227423171290408,    1030.9147225169564443,
      4.7022299276154507603e-7, 3.1878571710170115972e-6,
      4.7940153875711448496e-5, 5.2496623508411440227e-4,
      0.0053968661134780824779, 0.049837081920693776234,
      0.40979593830387765545,   2.9533186922862948404,
      18.278176130722516369,    94.47649715018912107,
      391.66075612645333624,    1221.4182034643210345,
      2548.6177980961291004,    2670.9883037012546541,
      1.2535083724002034147e-6, 8.484587142065570825e-6,
      1.2753227372734042108e-4, 0.0013950105363562648921,
      0.014325473993765291906,  0.13212452778932829125,
      1.0849287786885151432,    7.8068089156260172673,
      48.232254570679165833,    248.80659424902394371,
      1029.0736929484210803,    3200.5629438795801652,
      6656.7749162019607914,    6948.8586598121632302,
      3.3439394490599745013e-6, 2.2600596902211837757e-5,
      3.3955927589987356838e-4, 0.0037105306061050972474,
      0.038065263634919156421,  0.35068223415665236079,
      2.8760027832105027316,    20.665999500843274339,
      127.47939148516390205,    656.43636874254000885,
      2709.524283793247992,     8407.1174233600734871,
      17437.146284159740233,    18141.3487816388316};
  const static double c[45] = {
      -2.8849790431465382128e-15, -3.5125350943844774657e-14,
      -7.485086701370741975e-13,  -1.8383904048277485153e-11,
      -5.7303556446977223342e-10, -2.4449502737311496525e-8,
      -1.6765373351766929724e-6,  -3.2189516835265773471e-4,
      0.051503226936425277377,    -5.8674306822281631119e-15,
      -9.4884898451194085565e-15, -8.503386513660036434e-13,
      -1.8142997866945285736e-11, -5.7340238386338193949e-10,
      -2.4449138101742183665e-8,  -1.6765375646678855842e-6,
      -3.2189516826945356325e-4,  0.051503226936412017608,
      -1.4723362506764340882e-14, 1.3945147385179042899e-13,
      -1.9618041857586930923e-12, -1.3343606394065121821e-11,
      -5.8649674606973244159e-10, -2.4426060539669553778e-8,
      -1.6765631828366988006e-6,  -3.2189515191449587253e-4,
      0.051503226931820146445,    -5.8203519372580372987e-14,
      1.2266326995309845825e-12,  -1.3921625844526453237e-11,
      6.2228025878281625469e-11,  -8.8636681342142794023e-10,
      -2.3661241616744818608e-8,  -1.6777870960740520557e-6,
      -3.2189402882677074318e-4,  0.051503226479551959376,
      -4.5801527369223291722e-14, 6.7998819697143727209e-13,
      -4.1624857909290468421e-12, -3.2849009406112440998e-11,
      -3.247827569043111827e-10,  -2.5739209934053714983e-8,
      -1.6730566573215739195e-6,  -3.2190010909008684076e-4,
      0.05150322986693207715};
  w = fabs(x);
  if (w < 8.5) {
    t = w * w * 0.0625;
    k = 12 * ((int)t);
    y = (((((((((((a[k] * t + a[k + 1]) * t + a[k + 2]) * t + a[k + 3]) * t +
                a[k + 4]) *
                   t +
               a[k + 5]) *
                  t +
              a[k + 6]) *
                 t +
             a[k + 7]) *
                t +
            a[k + 8]) *
               t +
           a[k + 9]) *
              t +
          a[k + 10]) *
             t +
         a[k + 11]) *
        w;
  } else if (w < 12.5) {
    k = (int)w;
    t = w - k;
    k = 14 * (k - 8);
    y = ((((((((((((b[k] * t + b[k + 1]) * t + b[k + 2]) * t + b[k + 3]) * t +
                 b[k + 4]) *
                    t +
                b[k + 5]) *
                   t +
               b[k + 6]) *
                  t +
              b[k + 7]) *
                 t +
             b[k + 8]) *
                t +
            b[k + 9]) *
               t +
           b[k + 10]) *
              t +
          b[k + 11]) *
             t +
         b[k + 12]) *
            t +
        b[k + 13];
  } else {
    t = 60 / w;
    k = 9 * ((int)t);
    y = ((((((((c[k] * t + c[k + 1]) * t + c[k + 2]) * t + c[k + 3]) * t +
             c[k + 4]) *
                t +
            c[k + 5]) *
               t +
           c[k + 6]) *
              t +
          c[k + 7]) *
             t +
         c[k + 8]) *
        sqrt(t) * exp(w);
  }
  return x < 0 ? -y : y;
}


x86 assembly (clang, -O0):
<bessel_I1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movaps 0xee7(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xeb6(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1310 <bessel_I1+0x1f0>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  0xeb1(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
cvttsd2si -0x20(%rbp),%eax
imul   $0xc,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xeaa(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xe90(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xe6e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xe4c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xe2a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xe08(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xde6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xdc4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xda2(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xd80(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xd5e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xd3c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    169b <bessel_I1+0x57b>
movsd  0xcf0(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    151e <bessel_I1+0x3fe>
cvttsd2si -0x18(%rbp),%eax
mov    %eax,-0xc(%rbp)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x8,%eax
imul   $0xe,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xebb(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xea1(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xe7f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xe5d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xe3b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xe19(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xdf7(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xdd5(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xdb3(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xd91(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xd6f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xd4d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xd2b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xd,%eax
movslq %eax,%rcx
lea    0xd09(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1696 <bessel_I1+0x576>
movsd  0xaea(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
cvttsd2si -0x20(%rbp),%eax
imul   $0x9,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xefa(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xee0(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xebe(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xe9c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xe7a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xe58(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xe36(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xe14(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xdf2(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    169b <bessel_I1+0x57b>
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    16cf <bessel_I1+0x5af>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    16d9 <bessel_I1+0x5b9>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bessel_I1>:
sub    $0x38,%rsp
movapd %xmm0,%xmm3
movapd 0xed0(%rip),%xmm2
andpd  %xmm0,%xmm2
movsd  0xee4(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    11fa <bessel_I1+0xda>
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
mulsd  0xee2(%rip),%xmm1
cvttsd2si %xmm1,%eax
shl    $0x2,%eax
lea    (%rax,%rax,2),%eax
cltq
lea    0xed7(%rip),%rcx
mov    %eax,%edx
or     $0x1,%edx
movslq %edx,%rdx
movsd  (%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
mov    %eax,%edx
or     $0x2,%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
mov    %eax,%edx
or     $0x3,%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x20(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x28(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x30(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x38(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x40(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x48(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x50(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x58(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
jmp    13c1 <bessel_I1+0x2a1>
movsd  0xe26(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    12fe <bessel_I1+0x1de>
cvttsd2si %xmm2,%ecx
cvttpd2dq %xmm2,%xmm0
cvtdq2pd %xmm0,%xmm0
subsd  %xmm0,%xmm2
mov    %ecx,%eax
shl    $0x4,%eax
sub    %ecx,%eax
sub    %ecx,%eax
lea    -0x70(%rax),%ecx
movslq %ecx,%rdx
lea    0xfee(%rip),%rcx
lea    -0x6f(%rax),%esi
movslq %esi,%rsi
movsd  (%rcx,%rdx,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rsi,8),%xmm0
lea    -0x6e(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6d(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6c(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6b(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6a(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x69(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x68(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x67(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x66(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x65(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x64(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
add    $0xffffff9d,%eax
cltq
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rax,8),%xmm0
jmp    13c1 <bessel_I1+0x2a1>
movapd %xmm3,0x20(%rsp)
movsd  0xd24(%rip),%xmm0
divsd  %xmm2,%xmm0
cvttsd2si %xmm0,%eax
lea    (%rax,%rax,8),%eax
cltq
lea    0x1130(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x8(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x10(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x18(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x20(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x28(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x30(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x38(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x40(%rcx,%rax,8),%xmm1
movsd  %xmm1,0x8(%rsp)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     138b <bessel_I1+0x26b>
sqrtsd %xmm0,%xmm0
jmp    139c <bessel_I1+0x27c>
movapd %xmm2,0x10(%rsp)
call   1040 <sqrt@plt>
movapd 0x10(%rsp),%xmm2
movsd  0x8(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movapd %xmm2,%xmm0
call   1030 <exp@plt>
mulsd  0x8(%rsp),%xmm0
movapd 0x20(%rsp),%xmm3
movapd 0xc47(%rip),%xmm1
xorpd  %xmm0,%xmm1
xorpd  %xmm2,%xmm2
cmpltsd %xmm2,%xmm3
andpd  %xmm3,%xmm1
andnpd %xmm0,%xmm3
orpd   %xmm1,%xmm3
movapd %xmm3,%xmm0
add    $0x38,%rsp
ret

LLVM IR (-O0):
@bessel_I1.a = internal constant [60 x double] [double 0x3DE19330660432F3, double 0x3E2EABCD39CC06EE, double 0x3E7ABD40B3B44CAA, double 0x3EC2C94DFF94E215, double 0x3F0522A5D10FA959, double 0x3F427E4FACDBA874, double 0x3F7845C8A12CBE74, double 0x3FA6C16C16BF57DB, double 0x3FCC71C71C71D4EF, double 0x3FE5555555555526, double 1.000000e+00, double 5.000000e-01, double 0x3DE7C08BE2E99633, double 0x3E2A53643CEA8074, double 0x3E7B7B4491EFB655, double 0x3EC2B4C7AB96CAAD, double 0x3F0525B891206477, double 0x3F427DFAE6DB4B36, double 0x3F7845D5EEB9E9D3, double 0x3FA6C16A93EB914E, double 0x3FCC71C75A8516F8, double 0x3FE555554EA6E093, double 0x3FF0000000DDCAAB, double 0x3FDFFFFFFF972E31, double 0x3DEFE86BC97F5705, double 0x3E1DF7AD2B88EB15, double 0x3E7F210A27633B88, double 0x3EC1FDA7DA8194DB, double 0x3F055651670FD347, double 0x3F4274D52B9A34C4, double 0x3F784852EECD42E9, double 0x3FA6C0ED9204A2C5, double 0x3FCC71E9FD90EEB4, double 0x3FE5554EDD016C24, double 0x3FF00001735ABAED, double 0x3FDFFFFECF853A72, double 0x3DF54FFF882FA26B, double 0xBE0D244A3390AFCB, double 0x3E84DD36EAE5C5AF, double 0x3EBDE1D02FC19B87, double 0x3F06840608EE7F89, double 0x3F4222A99B88EBDB, double 0x3F78687FADEC6E74, double 0x3FA6B7E035122AC3, double 0x3FCC757FB91CA85A, double 0x3FE5545B5DB929B7, double 0x3FF0004F534831FE, double 0x3FDFFFA3E106B79C, double 0x3DFC5293B3AC66A2, double 0xBE3706D8BC70A48B, double 0x3E908CCA1E5BA358, double 0x3EA687AD3C3107EB, double 0x3F0B41B709D84ABD, double 0x3F40703161DF32CD, double 0x3F79478D5506E00B, double 0x3FA665C654C7FB59, double 0x3FCC9FF4D1DD9344, double 0x3FE545ABA1616918, double 0x3FF0066CDE5D0E39, double 0x3FDFF65A698943A6]
@bessel_I1.b = internal constant [70 x double] [double 0x3E71CDCE0244237B, double 0x3E9E4893576E011F, double 0x3EDC7EC3D682A48F, double 0x3F138D035E70CDDA, double 0x3F493005011184BE, double 0x3F7D284E7C62BAF5, double 0x3FAE10C9EC2C5B02, double 0x3FDB2EEE8DBE0838, double 0x40051E193AFA183D, double 0x402B6B863D29793F, double 0x404C944E9144295C, double 0x40666EC74D71F2C2, double 0x40779947926C38EB, double 0x4078FDF85E46607C, double 0x3E87B16D13156F38, double 0x3EB41CE23F5FD240, double 0x3EF2E9FFB83BFDBB, double 0x3F29EBA70A791AF2, double 0x3F60ACB9CCBED769, double 0x3F93461E0E8FCBCA, double 0x3FC3D732F1705C22, double 0x3FF1E77707E6EC4E, double 0x401BC1B23F13D456, double 0x4041F95DA74F4F66, double 0x4062AD693A71A2B1, double 0x407D36E070A56EA5, double 0x408E985693DF555D, double 0x40901BA8AD04FCF9, double 0x3E9F8E5E97BED801, double 0x3ECABDDF037C0547, double 0x3F09226B24FD5E81, double 0x3F4133BC67D51747, double 0x3F761B0637551C59, double 0x3FA9843EF9F474AC, double 0x3FDA3A18BE431F59, double 0x4007A0658CF047EF, double 0x403247368D07FB25, double 0x40579E7EEDE72CC4, double 0x40787A9275041BFB, double 0x409315AC3D876955, double 0x40A3E93C500834D0, double 0x40A4DDFA02F156CF, double 0x3EB507C707ED8EC2, double 0x3EE1CB20C706CC4B, double 0x3F20B745E3C28533, double 0x3F56DB192865FFF6, double 0x3F8D56AC926C618D, double 0x3FC0E974DEED63CD, double 0x3FF15BDE476F4D64, double 0x401F3A2C1DCAF09B, double 0x40481DBA848CB4EF, double 0x406F19CF9EBE1662, double 0x4090144B762A0DA8, double 0x40A901203A2E208F, double 0x40BA00C660E88090, double 0x40BB24DBD12123A1, double 0x3ECC0D0E2745E355, double 0x3EF7B2CD316B26EB, double 0x3F3640DBFC2BCDDB, double 0x3F6E658BF3543379, double 0x3FA37D4A4CD9E7B3, double 0x3FD67193E5BF6D22, double 0x4007020DBF48C0B1, double 0x4034AA7EF17B4631, double 0x405FDEAE599FB0A1, double 0x4084837DAEE531A6, double 0x40A52B0C6EECE3A5, double 0x40C06B8F07BA89A7, double 0x40D107495CB83C80, double 0x40D1B7565270390F]
@bessel_I1.c = internal constant [45 x double] [double 0xBCE9FC4F0AC9D298, double 0xBD23C618B7FE13FC, double 0xBD6A55F77BFFC3CB, double 0xBDB4369BE50DE08F, double 0xBE03B079609742B9, double 0xBE5A40A0CDAB295D, double 0xBEBC20AC4B5F9777, double 0xBF35188138875647, double 0x3FAA5EA186A92BDF, double 0xBCFA6CAFDFE8B71C, double 0xBD055DBDF357541B, double 0xBD6DEB2B6F49949F, double 0xBDB3F2CCC661A34C, double 0xBE03B3B361930FEA, double 0xBE5A408724FA679E, double 0xBEBC20AC8BF82CC3, double 0xBF351881386FEAC9, double 0x3FAA5EA186A92468, double 0xBD1093B86677E4BE, double 0x3D43A044D30D5F34, double 0xBD8141971DE63DE8, double 0xBDAD57C85857E05E, double 0xBE0426E143767E83, double 0xBE5A3A2F34940E16, double 0xBEBC20C8B6D7C87F, double 0xBF351881267467E3, double 0x3FAA5EA1869F0B6A, double 0xBD3062016D11F3E2, double 0x3D75944337B0E99C, double 0xBDAE9D2DBA167CB1, double 0x3DD11AE874E5AF7E, double 0xBE0E7490A014EA97, double 0xBE5967F3DBB69307, double 0xBEBC260A6BCAFA61, double 0xBF35187C539B5085, double 0x3FAA5EA182BC7F0F, double 0xBD29C8B21B6CE15A, double 0x3D67ECCA07C3FF00, double 0xBD924E8AD8620495, double 0xBDC20F164ACB7293, double 0xBDF651A380C2AEB4, double 0xBE5BA323E1123E2B, double 0xBEBC11B93FA7BB0E, double 0xBF35189670ED4A32, double 0x3FAA5EA19FD56C8A]
define double @bessel_I1(double %0) {
%2 = alloca double
%3 = alloca i32
%4 = alloca double
%5 = alloca double
%6 = alloca double
store double %0, double* %2
%7 = load double, double* %2
%8 = call double @llvm.fabs.f64(double %7)
store double %8, double* %4
%9 = load double, double* %4
%10 = fcmp olt double %9, 8.500000e+00
br i1 %10, label %11, label %102
11: ; preds = %1
%12 = load double, double* %4
%13 = load double, double* %4
%14 = fmul double %12, %13
%15 = fmul double %14, 6.250000e-02
store double %15, double* %5
%16 = load double, double* %5
%17 = fptosi double %16 to i32
%18 = mul nsw i32 12, %17
store i32 %18, i32* %3
%19 = load i32, i32* %3
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %20
%22 = load double, double* %21
%23 = load double, double* %5
%24 = load i32, i32* %3
%25 = add nsw i32 %24, 1
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %26
%28 = load double, double* %27
%29 = call double @llvm.fmuladd.f64(double %22, double %23, double %28)
%30 = load double, double* %5
%31 = load i32, i32* %3
%32 = add nsw i32 %31, 2
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %33
%35 = load double, double* %34
%36 = call double @llvm.fmuladd.f64(double %29, double %30, double %35)
%37 = load double, double* %5
%38 = load i32, i32* %3
%39 = add nsw i32 %38, 3
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %40
%42 = load double, double* %41
%43 = call double @llvm.fmuladd.f64(double %36, double %37, double %42)
%44 = load double, double* %5
%45 = load i32, i32* %3
%46 = add nsw i32 %45, 4
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %47
%49 = load double, double* %48
%50 = call double @llvm.fmuladd.f64(double %43, double %44, double %49)
%51 = load double, double* %5
%52 = load i32, i32* %3
%53 = add nsw i32 %52, 5
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %54
%56 = load double, double* %55
%57 = call double @llvm.fmuladd.f64(double %50, double %51, double %56)
%58 = load double, double* %5
%59 = load i32, i32* %3
%60 = add nsw i32 %59, 6
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %61
%63 = load double, double* %62
%64 = call double @llvm.fmuladd.f64(double %57, double %58, double %63)
%65 = load double, double* %5
%66 = load i32, i32* %3
%67 = add nsw i32 %66, 7
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %68
%70 = load double, double* %69
%71 = call double @llvm.fmuladd.f64(double %64, double %65, double %70)
%72 = load double, double* %5
%73 = load i32, i32* %3
%74 = add nsw i32 %73, 8
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %75
%77 = load double, double* %76
%78 = call double @llvm.fmuladd.f64(double %71, double %72, double %77)
%79 = load double, double* %5
%80 = load i32, i32* %3
%81 = add nsw i32 %80, 9
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %82
%84 = load double, double* %83
%85 = call double @llvm.fmuladd.f64(double %78, double %79, double %84)
%86 = load double, double* %5
%87 = load i32, i32* %3
%88 = add nsw i32 %87, 10
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %89
%91 = load double, double* %90
%92 = call double @llvm.fmuladd.f64(double %85, double %86, double %91)
%93 = load double, double* %5
%94 = load i32, i32* %3
%95 = add nsw i32 %94, 11
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %96
%98 = load double, double* %97
%99 = call double @llvm.fmuladd.f64(double %92, double %93, double %98)
%100 = load double, double* %4
%101 = fmul double %99, %100
store double %101, double* %6
br label %283
102: ; preds = %1
%103 = load double, double* %4
%104 = fcmp olt double %103, 1.250000e+01
br i1 %104, label %105, label %210
105: ; preds = %102
%106 = load double, double* %4
%107 = fptosi double %106 to i32
store i32 %107, i32* %3
%108 = load double, double* %4
%109 = load i32, i32* %3
%110 = sitofp i32 %109 to double
%111 = fsub double %108, %110
store double %111, double* %5
%112 = load i32, i32* %3
%113 = sub nsw i32 %112, 8
%114 = mul nsw i32 14, %113
store i32 %114, i32* %3
%115 = load i32, i32* %3
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %116
%118 = load double, double* %117
%119 = load double, double* %5
%120 = load i32, i32* %3
%121 = add nsw i32 %120, 1
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %122
%124 = load double, double* %123
%125 = call double @llvm.fmuladd.f64(double %118, double %119, double %124)
%126 = load double, double* %5
%127 = load i32, i32* %3
%128 = add nsw i32 %127, 2
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %129
%131 = load double, double* %130
%132 = call double @llvm.fmuladd.f64(double %125, double %126, double %131)
%133 = load double, double* %5
%134 = load i32, i32* %3
%135 = add nsw i32 %134, 3
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %136
%138 = load double, double* %137
%139 = call double @llvm.fmuladd.f64(double %132, double %133, double %138)
%140 = load double, double* %5
%141 = load i32, i32* %3
%142 = add nsw i32 %141, 4
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %143
%145 = load double, double* %144
%146 = call double @llvm.fmuladd.f64(double %139, double %140, double %145)
%147 = load double, double* %5
%148 = load i32, i32* %3
%149 = add nsw i32 %148, 5
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %150
%152 = load double, double* %151
%153 = call double @llvm.fmuladd.f64(double %146, double %147, double %152)
%154 = load double, double* %5
%155 = load i32, i32* %3
%156 = add nsw i32 %155, 6
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %157
%159 = load double, double* %158
%160 = call double @llvm.fmuladd.f64(double %153, double %154, double %159)
%161 = load double, double* %5
%162 = load i32, i32* %3
%163 = add nsw i32 %162, 7
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %164
%166 = load double, double* %165
%167 = call double @llvm.fmuladd.f64(double %160, double %161, double %166)
%168 = load double, double* %5
%169 = load i32, i32* %3
%170 = add nsw i32 %169, 8
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %171
%173 = load double, double* %172
%174 = call double @llvm.fmuladd.f64(double %167, double %168, double %173)
%175 = load double, double* %5
%176 = load i32, i32* %3
%177 = add nsw i32 %176, 9
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %178
%180 = load double, double* %179
%181 = call double @llvm.fmuladd.f64(double %174, double %175, double %180)
%182 = load double, double* %5
%183 = load i32, i32* %3
%184 = add nsw i32 %183, 10
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %185
%187 = load double, double* %186
%188 = call double @llvm.fmuladd.f64(double %181, double %182, double %187)
%189 = load double, double* %5
%190 = load i32, i32* %3
%191 = add nsw i32 %190, 11
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %192
%194 = load double, double* %193
%195 = call double @llvm.fmuladd.f64(double %188, double %189, double %194)
%196 = load double, double* %5
%197 = load i32, i32* %3
%198 = add nsw i32 %197, 12
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %199
%201 = load double, double* %200
%202 = call double @llvm.fmuladd.f64(double %195, double %196, double %201)
%203 = load double, double* %5
%204 = load i32, i32* %3
%205 = add nsw i32 %204, 13
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %206
%208 = load double, double* %207
%209 = call double @llvm.fmuladd.f64(double %202, double %203, double %208)
store double %209, double* %6
br label %282
210: ; preds = %102
%211 = load double, double* %4
%212 = fdiv double 6.000000e+01, %211
store double %212, double* %5
%213 = load double, double* %5
%214 = fptosi double %213 to i32
%215 = mul nsw i32 9, %214
store i32 %215, i32* %3
%216 = load i32, i32* %3
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %217
%219 = load double, double* %218
%220 = load double, double* %5
%221 = load i32, i32* %3
%222 = add nsw i32 %221, 1
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %223
%225 = load double, double* %224
%226 = call double @llvm.fmuladd.f64(double %219, double %220, double %225)
%227 = load double, double* %5
%228 = load i32, i32* %3
%229 = add nsw i32 %228, 2
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %230
%232 = load double, double* %231
%233 = call double @llvm.fmuladd.f64(double %226, double %227, double %232)
%234 = load double, double* %5
%235 = load i32, i32* %3
%236 = add nsw i32 %235, 3
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %237
%239 = load double, double* %238
%240 = call double @llvm.fmuladd.f64(double %233, double %234, double %239)
%241 = load double, double* %5
%242 = load i32, i32* %3
%243 = add nsw i32 %242, 4
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %244
%246 = load double, double* %245
%247 = call double @llvm.fmuladd.f64(double %240, double %241, double %246)
%248 = load double, double* %5
%249 = load i32, i32* %3
%250 = add nsw i32 %249, 5
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %251
%253 = load double, double* %252
%254 = call double @llvm.fmuladd.f64(double %247, double %248, double %253)
%255 = load double, double* %5
%256 = load i32, i32* %3
%257 = add nsw i32 %256, 6
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %258
%260 = load double, double* %259
%261 = call double @llvm.fmuladd.f64(double %254, double %255, double %260)
%262 = load double, double* %5
%263 = load i32, i32* %3
%264 = add nsw i32 %263, 7
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %265
%267 = load double, double* %266
%268 = call double @llvm.fmuladd.f64(double %261, double %262, double %267)
%269 = load double, double* %5
%270 = load i32, i32* %3
%271 = add nsw i32 %270, 8
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %272
%274 = load double, double* %273
%275 = call double @llvm.fmuladd.f64(double %268, double %269, double %274)
%276 = load double, double* %5
%277 = call double @sqrt(double %276)
%278 = fmul double %275, %277
%279 = load double, double* %4
%280 = call double @exp(double %279)
%281 = fmul double %278, %280
store double %281, double* %6
br label %282
282: ; preds = %210, %105
br label %283
283: ; preds = %282, %11
%284 = load double, double* %2
%285 = fcmp olt double %284, 0.000000e+00
br i1 %285, label %286, label %289
286: ; preds = %283
%287 = load double, double* %6
%288 = fneg double %287
br label %291
289: ; preds = %283
%290 = load double, double* %6
br label %291
291: ; preds = %289, %286
%292 = phi double [ %288, %286 ], [ %290, %289 ]
ret double %292
}

LLVM IR (-O2):
@bessel_I1.a = internal unnamed_addr constant [60 x double] [double 0x3DE19330660432F3, double 0x3E2EABCD39CC06EE, double 0x3E7ABD40B3B44CAA, double 0x3EC2C94DFF94E215, double 0x3F0522A5D10FA959, double 0x3F427E4FACDBA874, double 0x3F7845C8A12CBE74, double 0x3FA6C16C16BF57DB, double 0x3FCC71C71C71D4EF, double 0x3FE5555555555526, double 1.000000e+00, double 5.000000e-01, double 0x3DE7C08BE2E99633, double 0x3E2A53643CEA8074, double 0x3E7B7B4491EFB655, double 0x3EC2B4C7AB96CAAD, double 0x3F0525B891206477, double 0x3F427DFAE6DB4B36, double 0x3F7845D5EEB9E9D3, double 0x3FA6C16A93EB914E, double 0x3FCC71C75A8516F8, double 0x3FE555554EA6E093, double 0x3FF0000000DDCAAB, double 0x3FDFFFFFFF972E31, double 0x3DEFE86BC97F5705, double 0x3E1DF7AD2B88EB15, double 0x3E7F210A27633B88, double 0x3EC1FDA7DA8194DB, double 0x3F055651670FD347, double 0x3F4274D52B9A34C4, double 0x3F784852EECD42E9, double 0x3FA6C0ED9204A2C5, double 0x3FCC71E9FD90EEB4, double 0x3FE5554EDD016C24, double 0x3FF00001735ABAED, double 0x3FDFFFFECF853A72, double 0x3DF54FFF882FA26B, double 0xBE0D244A3390AFCB, double 0x3E84DD36EAE5C5AF, double 0x3EBDE1D02FC19B87, double 0x3F06840608EE7F89, double 0x3F4222A99B88EBDB, double 0x3F78687FADEC6E74, double 0x3FA6B7E035122AC3, double 0x3FCC757FB91CA85A, double 0x3FE5545B5DB929B7, double 0x3FF0004F534831FE, double 0x3FDFFFA3E106B79C, double 0x3DFC5293B3AC66A2, double 0xBE3706D8BC70A48B, double 0x3E908CCA1E5BA358, double 0x3EA687AD3C3107EB, double 0x3F0B41B709D84ABD, double 0x3F40703161DF32CD, double 0x3F79478D5506E00B, double 0x3FA665C654C7FB59, double 0x3FCC9FF4D1DD9344, double 0x3FE545ABA1616918, double 0x3FF0066CDE5D0E39, double 0x3FDFF65A698943A6]
@bessel_I1.b = internal unnamed_addr constant [70 x double] [double 0x3E71CDCE0244237B, double 0x3E9E4893576E011F, double 0x3EDC7EC3D682A48F, double 0x3F138D035E70CDDA, double 0x3F493005011184BE, double 0x3F7D284E7C62BAF5, double 0x3FAE10C9EC2C5B02, double 0x3FDB2EEE8DBE0838, double 0x40051E193AFA183D, double 0x402B6B863D29793F, double 0x404C944E9144295C, double 0x40666EC74D71F2C2, double 0x40779947926C38EB, double 0x4078FDF85E46607C, double 0x3E87B16D13156F38, double 0x3EB41CE23F5FD240, double 0x3EF2E9FFB83BFDBB, double 0x3F29EBA70A791AF2, double 0x3F60ACB9CCBED769, double 0x3F93461E0E8FCBCA, double 0x3FC3D732F1705C22, double 0x3FF1E77707E6EC4E, double 0x401BC1B23F13D456, double 0x4041F95DA74F4F66, double 0x4062AD693A71A2B1, double 0x407D36E070A56EA5, double 0x408E985693DF555D, double 0x40901BA8AD04FCF9, double 0x3E9F8E5E97BED801, double 0x3ECABDDF037C0547, double 0x3F09226B24FD5E81, double 0x3F4133BC67D51747, double 0x3F761B0637551C59, double 0x3FA9843EF9F474AC, double 0x3FDA3A18BE431F59, double 0x4007A0658CF047EF, double 0x403247368D07FB25, double 0x40579E7EEDE72CC4, double 0x40787A9275041BFB, double 0x409315AC3D876955, double 0x40A3E93C500834D0, double 0x40A4DDFA02F156CF, double 0x3EB507C707ED8EC2, double 0x3EE1CB20C706CC4B, double 0x3F20B745E3C28533, double 0x3F56DB192865FFF6, double 0x3F8D56AC926C618D, double 0x3FC0E974DEED63CD, double 0x3FF15BDE476F4D64, double 0x401F3A2C1DCAF09B, double 0x40481DBA848CB4EF, double 0x406F19CF9EBE1662, double 0x4090144B762A0DA8, double 0x40A901203A2E208F, double 0x40BA00C660E88090, double 0x40BB24DBD12123A1, double 0x3ECC0D0E2745E355, double 0x3EF7B2CD316B26EB, double 0x3F3640DBFC2BCDDB, double 0x3F6E658BF3543379, double 0x3FA37D4A4CD9E7B3, double 0x3FD67193E5BF6D22, double 0x4007020DBF48C0B1, double 0x4034AA7EF17B4631, double 0x405FDEAE599FB0A1, double 0x4084837DAEE531A6, double 0x40A52B0C6EECE3A5, double 0x40C06B8F07BA89A7, double 0x40D107495CB83C80, double 0x40D1B7565270390F]
@bessel_I1.c = internal unnamed_addr constant [45 x double] [double 0xBCE9FC4F0AC9D298, double 0xBD23C618B7FE13FC, double 0xBD6A55F77BFFC3CB, double 0xBDB4369BE50DE08F, double 0xBE03B079609742B9, double 0xBE5A40A0CDAB295D, double 0xBEBC20AC4B5F9777, double 0xBF35188138875647, double 0x3FAA5EA186A92BDF, double 0xBCFA6CAFDFE8B71C, double 0xBD055DBDF357541B, double 0xBD6DEB2B6F49949F, double 0xBDB3F2CCC661A34C, double 0xBE03B3B361930FEA, double 0xBE5A408724FA679E, double 0xBEBC20AC8BF82CC3, double 0xBF351881386FEAC9, double 0x3FAA5EA186A92468, double 0xBD1093B86677E4BE, double 0x3D43A044D30D5F34, double 0xBD8141971DE63DE8, double 0xBDAD57C85857E05E, double 0xBE0426E143767E83, double 0xBE5A3A2F34940E16, double 0xBEBC20C8B6D7C87F, double 0xBF351881267467E3, double 0x3FAA5EA1869F0B6A, double 0xBD3062016D11F3E2, double 0x3D75944337B0E99C, double 0xBDAE9D2DBA167CB1, double 0x3DD11AE874E5AF7E, double 0xBE0E7490A014EA97, double 0xBE5967F3DBB69307, double 0xBEBC260A6BCAFA61, double 0xBF35187C539B5085, double 0x3FAA5EA182BC7F0F, double 0xBD29C8B21B6CE15A, double 0x3D67ECCA07C3FF00, double 0xBD924E8AD8620495, double 0xBDC20F164ACB7293, double 0xBDF651A380C2AEB4, double 0xBE5BA323E1123E2B, double 0xBEBC11B93FA7BB0E, double 0xBF35189670ED4A32, double 0x3FAA5EA19FD56C8A]
define double @bessel_I1(double %0) {
%2 = tail call double @llvm.fabs.f64(double %0)
%3 = fcmp olt double %2, 8.500000e+00
br i1 %3, label %4, label %68
4: ; preds = %1
%5 = fmul double %0, %0
%6 = fmul double %5, 6.250000e-02
%7 = fptosi double %6 to i32
%8 = mul nsw i32 %7, 12
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %9
%11 = load double, double* %10
%12 = or i32 %8, 1
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %13
%15 = load double, double* %14
%16 = tail call double @llvm.fmuladd.f64(double %11, double %6, double %15)
%17 = or i32 %8, 2
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %18
%20 = load double, double* %19
%21 = tail call double @llvm.fmuladd.f64(double %16, double %6, double %20)
%22 = or i32 %8, 3
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %23
%25 = load double, double* %24
%26 = tail call double @llvm.fmuladd.f64(double %21, double %6, double %25)
%27 = add nsw i32 %8, 4
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %28
%30 = load double, double* %29
%31 = tail call double @llvm.fmuladd.f64(double %26, double %6, double %30)
%32 = add nsw i32 %8, 5
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %33
%35 = load double, double* %34
%36 = tail call double @llvm.fmuladd.f64(double %31, double %6, double %35)
%37 = add nsw i32 %8, 6
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %38
%40 = load double, double* %39
%41 = tail call double @llvm.fmuladd.f64(double %36, double %6, double %40)
%42 = add nsw i32 %8, 7
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %43
%45 = load double, double* %44
%46 = tail call double @llvm.fmuladd.f64(double %41, double %6, double %45)
%47 = add nsw i32 %8, 8
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %48
%50 = load double, double* %49
%51 = tail call double @llvm.fmuladd.f64(double %46, double %6, double %50)
%52 = add nsw i32 %8, 9
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %53
%55 = load double, double* %54
%56 = tail call double @llvm.fmuladd.f64(double %51, double %6, double %55)
%57 = add nsw i32 %8, 10
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %58
%60 = load double, double* %59
%61 = tail call double @llvm.fmuladd.f64(double %56, double %6, double %60)
%62 = add nsw i32 %8, 11
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [60 x double], [60 x double]* @bessel_I1.a, i64 0, i64 %63
%65 = load double, double* %64
%66 = tail call double @llvm.fmuladd.f64(double %61, double %6, double %65)
%67 = fmul double %2, %66
br label %195
68: ; preds = %1
%69 = fcmp olt double %2, 1.250000e+01
br i1 %69, label %70, label %144
70: ; preds = %68
%71 = fptosi double %2 to i32
%72 = sitofp i32 %71 to double
%73 = fsub double %2, %72
%74 = mul i32 %71, 14
%75 = add i32 %74, -112
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %76
%78 = load double, double* %77
%79 = add i32 %74, -111
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %80
%82 = load double, double* %81
%83 = tail call double @llvm.fmuladd.f64(double %78, double %73, double %82)
%84 = add i32 %74, -110
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %85
%87 = load double, double* %86
%88 = tail call double @llvm.fmuladd.f64(double %83, double %73, double %87)
%89 = add i32 %74, -109
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %90
%92 = load double, double* %91
%93 = tail call double @llvm.fmuladd.f64(double %88, double %73, double %92)
%94 = add i32 %74, -108
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %95
%97 = load double, double* %96
%98 = tail call double @llvm.fmuladd.f64(double %93, double %73, double %97)
%99 = add i32 %74, -107
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %100
%102 = load double, double* %101
%103 = tail call double @llvm.fmuladd.f64(double %98, double %73, double %102)
%104 = add i32 %74, -106
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %105
%107 = load double, double* %106
%108 = tail call double @llvm.fmuladd.f64(double %103, double %73, double %107)
%109 = add i32 %74, -105
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %110
%112 = load double, double* %111
%113 = tail call double @llvm.fmuladd.f64(double %108, double %73, double %112)
%114 = add i32 %74, -104
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %115
%117 = load double, double* %116
%118 = tail call double @llvm.fmuladd.f64(double %113, double %73, double %117)
%119 = add i32 %74, -103
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %120
%122 = load double, double* %121
%123 = tail call double @llvm.fmuladd.f64(double %118, double %73, double %122)
%124 = add i32 %74, -102
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %125
%127 = load double, double* %126
%128 = tail call double @llvm.fmuladd.f64(double %123, double %73, double %127)
%129 = add i32 %74, -101
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %130
%132 = load double, double* %131
%133 = tail call double @llvm.fmuladd.f64(double %128, double %73, double %132)
%134 = add i32 %74, -100
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %135
%137 = load double, double* %136
%138 = tail call double @llvm.fmuladd.f64(double %133, double %73, double %137)
%139 = add i32 %74, -99
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds [70 x double], [70 x double]* @bessel_I1.b, i64 0, i64 %140
%142 = load double, double* %141
%143 = tail call double @llvm.fmuladd.f64(double %138, double %73, double %142)
br label %195
144: ; preds = %68
%145 = fdiv double 6.000000e+01, %2
%146 = fptosi double %145 to i32
%147 = mul nsw i32 %146, 9
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %148
%150 = load double, double* %149
%151 = add nsw i32 %147, 1
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %152
%154 = load double, double* %153
%155 = tail call double @llvm.fmuladd.f64(double %150, double %145, double %154)
%156 = add nsw i32 %147, 2
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %157
%159 = load double, double* %158
%160 = tail call double @llvm.fmuladd.f64(double %155, double %145, double %159)
%161 = add nsw i32 %147, 3
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %162
%164 = load double, double* %163
%165 = tail call double @llvm.fmuladd.f64(double %160, double %145, double %164)
%166 = add nsw i32 %147, 4
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %167
%169 = load double, double* %168
%170 = tail call double @llvm.fmuladd.f64(double %165, double %145, double %169)
%171 = add nsw i32 %147, 5
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %172
%174 = load double, double* %173
%175 = tail call double @llvm.fmuladd.f64(double %170, double %145, double %174)
%176 = add nsw i32 %147, 6
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %177
%179 = load double, double* %178
%180 = tail call double @llvm.fmuladd.f64(double %175, double %145, double %179)
%181 = add nsw i32 %147, 7
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %182
%184 = load double, double* %183
%185 = tail call double @llvm.fmuladd.f64(double %180, double %145, double %184)
%186 = add nsw i32 %147, 8
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [45 x double], [45 x double]* @bessel_I1.c, i64 0, i64 %187
%189 = load double, double* %188
%190 = tail call double @llvm.fmuladd.f64(double %185, double %145, double %189)
%191 = tail call double @sqrt(double %145)
%192 = fmul double %190, %191
%193 = tail call double @exp(double %2)
%194 = fmul double %192, %193
br label %195
195: ; preds = %70, %144, %4
%196 = phi double [ %67, %4 ], [ %143, %70 ], [ %194, %144 ]
%197 = fcmp olt double %0, 0.000000e+00
%198 = fneg double %196
%199 = select i1 %197, double %198, double %196
ret double %199
}