double bessel_K0(double x) {
  int k;
  double t, y, v, theta;
  const static double a[16] = {
      -1.51249795e-12,         2.9979612902e-10,        -4.317352912436e-8,
      4.31735413787068e-6,     -2.763106650893309e-4,   0.0099471839432433894,
      -0.15915494309189533339, 0.63661977236758134306,  4.09490035e-12,
      -7.6925095943e-10,       1.0358472550303e-7,      -9.49500519343105e-6,
      5.3860266685948738e-4,   -0.01607396802593822992, 0.17760601686906713536,
      -0.07380429510868722524};
  const static double b[112] = {
      -2.958527319e-11,        -4.799424787e-11,        7.0761365903e-10,
      7.86916310954e-9,        4.40632174633e-8,        1.047420705431e-7,
      -7.0359581447993e-7,     -1.068225180236166e-5,   -7.636033201484949e-5,
      -3.4318294473105478e-4,  -5.0019381740765567e-4,  0.00898034680285547482,
      0.14783488851798565262,  0.01218096458136948754,  -3.790394288e-11,
      -8.3012324083e-10,       -4.16344143065e-9,       -1.59750317942e-9,
      1.1897479804282e-7,      8.9462034665663e-7,      2.7927785508031e-6,
      -7.10267818373816e-6,    -1.4158631248747538e-4,  -8.9512296835766028e-4,
      -0.00286419212921734238, 0.00448696141199596815,  0.16247276853497028694,
      0.16806523426268420517,  4.9508820408e-10,        2.40256475451e-9,
      -3.4128702476e-9,        -7.926555593644e-8,      -2.7510687602104e-7,
      8.2850014912691e-7,      1.202838962100801e-5,    4.446440998573947e-5,
      -6.345799532264893e-5,   -0.00153636349657759957, -0.00784582749467635199,
      -0.01091113270659651752, 0.15855078058220179592,  0.33112075987570150227,
      -1.21381163034e-9,       -1.85252445637e-9,       2.782181715752e-8,
      9.983716245339e-8,       -5.1382328105461e-7,     -4.13045112612025e-6,
      6.9219807212556e-7,      1.1346881914173059e-4,   4.485714262231131e-4,
      -7.5862241142011713e-4,  -0.01330170710405210993, -0.04337207915110066583,
      0.10708263075506099964,  0.46937172516119821029,  1.23954313286e-9,
      -1.3150647347e-9,        -3.208158247443e-8,      6.936208476862e-8,
      9.6326321605564e-7,      -1.86813677726279e-6,    -3.296596487362508e-5,
      -1.027532398838717e-5,   8.8296805857821394e-4,   0.00288502916411875494,
      -0.00981551522729451135, -0.08175499367255420548, -0.0197090243242566078,
      0.51958016003260732459,  -5.0293922567e-10,       2.5905819115e-9,
      3.80069015768e-9,        -1.257928760583e-7,      2.9666593806065e-7,
      5.32199410651341e-6,     -1.466013674557952e-5,   -2.1196179800800308e-4,
      1.488907515797525e-4,    0.00598670133725335804,  0.00917434640154761191,
      -0.08592436550224288681, -0.1970089491453584694,  0.41202451505149651586,
      2.689416111e-11,         -6.0225798842e-10,       7.16632287642e-9,
      -3.038834206093e-8,      -4.9829955736697e-7,     3.6467866107985e-6,
      2.599276311771812e-5,    -1.6374249229498868e-4,  -0.00112385259950125883,
      0.00342431039748960465,  0.03016663018029814938,  -0.02432512430353342927,
      -0.31797371916576712163, 0.14418001571733803493,  1.9463221e-12,
      -1.3451327719e-10,       3.36581427068e-9,        2.163920016772e-8,
      -5.0868502638387e-7,     -1.26562372408989e-6,    3.554054033687039e-5,
      7.490048474688881e-5,    -0.0014238004200886133,  -0.00355314274445060456,
      0.03042001885994619102,  0.07365497405664882878,  -0.26882214651298246524,
      -0.16578636480856581212};
  const static double c[126] = {
      1.4133441141e-10,        -1.16239182574e-9,
      5.60813675548e-9,        4.361111919906e-8,
      -1.9980743680592e-7,     -6.23828267379045e-6,
      2.659779111113435e-5,    3.4429768949740887e-4,
      -0.00128058451746064875, -0.01165906901727504569,
      0.03800023545011044967,  0.13079665132249175616,
      -0.30099732306965462304, -0.19470500862950453349,
      2.985070388e-11,         -4.3935370028e-10,
      -2.70094988368e-9,       5.27013936718e-8,
      3.5596645009533e-7,      -5.5939305510166e-6,
      -2.415386269153308e-5,   3.4989509210648774e-4,
      9.8204687587121096e-4,   -0.01241793885175385487,
      -0.0139851984097438996,  0.16758045653582919005,
      0.02375823895638961834,  -0.33948059288191103829,
      3.440543098e-11,         -1.492311224e-11,
      -5.50307983816e-9,       2.88861169685e-9,
      6.5975576340131e-7,      -6.4253433004282e-7,
      -5.095354686815779e-5,   6.35545499385876e-5,
      0.00231750171436134067,  -0.00344140664586595266,
      -0.04796153689875432703, 0.06553727330877767204,
      0.27409127395927545297,  -0.17324243491898233567,
      1.869953108e-11,         3.5678205287e-10,
      -3.23369443017e-9,       -4.932837601739e-8,
      4.0636932259569e-7,      4.55294558480472e-6,
      -3.376596464782138e-5,   -2.5758322585307069e-4,
      0.00167416927479443727,  0.00735300543429220468,
      -0.03904554680817849396, -0.07593187710651205994,
      0.25912851048611625179,  0.11731328614820863082,
      -1.168499781e-11,        4.049157062e-10,
      1.76042185153e-9,        -5.796810963324e-8,
      -1.7664264701199e-7,     5.65232278687159e-6,
      1.060939366068237e-5,    -3.4382320897779425e-4,
      -2.8786871040915476e-4,  0.0110369660250104046,
      0.00105742483935856071,  -0.13664188676516064192,
      0.02616867939853747003,  0.27020510536578747599,
      -3.09714065e-11,         1.0275535029e-10,
      5.07546062007e-9,        -1.697584561546e-8,
      -5.8222618994516e-7,     1.92483899143098e-6,
      4.3388818054202e-5,      -1.3714074807064326e-4,
      -0.00184722933402281351, 0.0051736071998208299,
      0.03611657815299529568,  -0.07491163418624572802,
      -0.20317989938720766824, 0.17121062620272384486,
      -2.289344046e-11,        -2.7762757821e-10,
      3.9133021423e-9,         3.673304032817e-8,
      -4.7258696909223e-7,     -3.23109113206792e-6,
      3.749284946160478e-5,    1.7039067180362504e-4,
      -0.00172637004639815403, -0.00454152531086626043,
      0.03717220530377418124,  0.04489395902785574534,
      -0.23370422835726857839, -0.06753037249787639679,
      4.73299038e-12,          -4.0489249115e-10,
      -5.6747261733e-10,       5.656135976496e-8,
      3.564150059329e-8,       -5.34821220288168e-6,
      7.581385461348e-8,       3.1190256463318867e-4,
      -1.4634564376714538e-4,  -0.0095821355155047985,
      0.00624681472076521329,  0.11513529702572439703,
      -0.05794254714300082167, -0.22523211169118786537,
      2.732444065e-11,         -1.7726475495e-10,
      -4.37562701999e-9,       2.68153688556e-8,
      4.8799100503315e-7,      -2.76490187540644e-6,
      -3.513357925824063e-5,   1.7693155138571443e-4,
      0.00144533233498513085,  -0.00599106092630544975,
      -0.02759437856689911694, 0.07945362316083459396,
      0.15383825653750118008,  -0.17121430684466928734};
  const static double d[52] = {
      1.059601355592185731e-14,  -2.71150591218550377e-13,
      8.6514809056201638e-12,    -4.6264028554286627e-10,
      5.0815403835647104e-8,     -1.76722552048141208e-5,
      0.16286750396763997378,    2.949651820598278873e-13,
      -8.818215611676125741e-12, 3.571119876162253451e-10,
      -2.63192412099371706e-8,   4.709502795656698909e-6,
      -0.005208333333333283282,  7.18344107717531977e-15,
      -2.51623725588410308e-13,  8.6017784918920604e-12,
      -4.6256876614290359e-10,   5.0815343220437937e-8,
      -1.7672255176494197e-5,    0.16286750396763433767,
      2.2327570859680094777e-13, -8.464594853517051292e-12,
      3.563766464349055183e-10,  -2.631843986737892965e-8,
      4.70950234228865941e-6,    -0.0052083333332278466225,
      5.15413392842889366e-15,   -2.27740238380640162e-13,
      8.4827767197609014e-12,    -4.6224753682737618e-10,
      5.0814848128929134e-8,     -1.7672254763876748e-5,
      0.16286750396748926663,    1.7316195320192170887e-13,
      -7.971122772293919646e-12, 3.544039469911895749e-10,
      -2.631443902081701081e-8,  4.709498228695400603e-6,
      -0.005208333331514365361,  3.84653681453798517e-15,
      -2.04464520778789011e-13,  8.3089298605177838e-12,
      -4.6155016158412096e-10,   5.081326369646665e-8,
      -1.76722528311426167e-5,   0.1628675039665006593,
      1.3797879972460878797e-13, -7.448089381011684812e-12,
      3.51273379710695978e-10,   -2.630500895563592722e-8,
      4.709483934775839193e-6,   -0.0052083333227940760113};
  if (x < 0.85) {
    t = x * x;
    y = ((((((a[0] * t + a[1]) * t + a[2]) * t + a[3]) * t + a[4]) * t + a[5]) *
             t +
         a[6]) *
            t +
        a[7];
    y = ((((((a[8] * t + a[9]) * t + a[10]) * t + a[11]) * t + a[12]) * t +
          a[13]) *
             t +
         a[14]) *
            t +
        a[15] + y * log(x);
  } else if (x < 4.5) {
    t = x - 4 / x;
    k = (int)(t + 4);
    t -= k - 3.5;
    k *= 14;
    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 if (x < 12.5) {
    k = (int)x;
    t = x - (k + 0.5);
    k = 14 * (k - 4);
    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]) *
                t +
            c[k + 9]) *
               t +
           c[k + 10]) *
              t +
          c[k + 11]) *
             t +
         c[k + 12]) *
            t +
        c[k + 13];
  } else {
    v = 24 / x;
    t = v * v;
    k = 13 * ((int)t);
    y = ((((((d[k] * t + d[k + 1]) * t + d[k + 2]) * t + d[k + 3]) * t +
           d[k + 4]) *
              t +
          d[k + 5]) *
             t +
         d[k + 6]) *
        sqrt(v);
    theta = (((((d[k + 7] * t + d[k + 8]) * t + d[k + 9]) * t + d[k + 10]) * t +
              d[k + 11]) *
                 t +
             d[k + 12]) *
                v -
            0.78539816339744830962;
    y *= sin(x + theta);
  }
  return y;
}


x86 assembly (clang, -O0):
<bessel_K0>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  0xebb(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    12d2 <bessel_K0+0x1a2>
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xed9(%rip),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xed4(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xec7(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xeba(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xead(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xea0(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe93(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe86(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe79(%rip),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe74(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe67(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe5a(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe4d(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe40(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe33(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe26(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <log@plt>
movsd  -0x40(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x38(%rbp),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    194c <bessel_K0+0x81c>
movsd  0xd2e(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    150e <bessel_K0+0x3de>
movsd  -0x8(%rbp),%xmm0
movsd  0xd46(%rip),%xmm1
divsd  -0x8(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xd30(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xc(%rbp)
cvtsi2sdl -0xc(%rbp),%xmm1
movsd  0xd0f(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  -0x18(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
imul   $0xe,-0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xd7b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xd61(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xd3f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xd1d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xcfb(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xcd9(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xcb7(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xc95(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xc73(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xc51(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xc2f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xc0d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xbeb(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xd,%eax
movslq %eax,%rcx
lea    0xbc9(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1947 <bessel_K0+0x817>
movsd  0xafa(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    1728 <bessel_K0+0x5f8>
cvttsd2si -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
movsd  -0x8(%rbp),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
movsd  0xaed(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x4,%eax
imul   $0xe,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xee1(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xec7(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xea5(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xe83(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xe61(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xe3f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xe1d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xdfb(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xdd9(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xdb7(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xd95(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xd73(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xd51(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xd,%eax
movslq %eax,%rcx
lea    0xd2f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1942 <bessel_K0+0x812>
movsd  0x8f0(%rip),%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
cvttsd2si -0x18(%rbp),%eax
imul   $0xd,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0x10d1(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0x10b7(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0x1095(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0x1073(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0x1051(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0x102f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0x100d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xfd0(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xfb6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xf94(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xf72(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xf50(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xf2e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x6f8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
call   1030 <sin@plt>
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1947 <bessel_K0+0x817>
jmp    194c <bessel_K0+0x81c>
movsd  -0x20(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bessel_K0>:
push   %r14
push   %rbx
sub    $0x38,%rsp
movapd %xmm0,%xmm2
movsd  0xebd(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    1233 <bessel_K0+0x103>
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movsd  0xee3(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xedf(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xedb(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xed7(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xed3(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xecf(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xecb(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xec7(%rip),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0xec1(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xebd(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeb9(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeb5(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeb1(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xead(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xea9(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xea5(%rip),%xmm1
movsd  %xmm1,0x10(%rsp)
movapd %xmm2,%xmm0
call   1040 <log@plt>
mulsd  0x8(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
jmp    154a <bessel_K0+0x41a>
movsd  0xdcd(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    131b <bessel_K0+0x1eb>
movsd  0xde3(%rip),%xmm0
movapd %xmm0,%xmm1
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
cvttsd2si %xmm0,%eax
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  0xdc7(%rip),%xmm0
subsd  %xmm0,%xmm2
mov    %eax,%ecx
shl    $0x4,%ecx
sub    %eax,%ecx
sub    %eax,%ecx
movslq %ecx,%rax
lea    0xe38(%rip),%rcx
mov    %eax,%edx
or     $0x1,%edx
movslq %edx,%rdx
movsd  (%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x10(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x18(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x20(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x28(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x30(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x38(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x40(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x48(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x50(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x58(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x60(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x68(%rcx,%rax,8),%xmm0
jmp    154a <bessel_K0+0x41a>
movsd  0xced(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    1427 <bessel_K0+0x2f7>
cvttsd2si %xmm2,%ecx
cvttpd2dq %xmm2,%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  0xce7(%rip),%xmm0
subsd  %xmm0,%xmm2
mov    %ecx,%eax
shl    $0x4,%eax
sub    %ecx,%eax
sub    %ecx,%eax
lea    -0x38(%rax),%ecx
movslq %ecx,%rdx
lea    0x10e5(%rip),%rcx
lea    -0x37(%rax),%esi
movslq %esi,%rsi
movsd  (%rcx,%rdx,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rsi,8),%xmm0
lea    -0x36(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x35(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x34(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x33(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x32(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x31(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x30(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x2f(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x2e(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x2d(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x2c(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
add    $0xffffffd5,%eax
cltq
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rax,8),%xmm0
jmp    154a <bessel_K0+0x41a>
movsd  0xbe9(%rip),%xmm3
divsd  %xmm2,%xmm3
movapd %xmm3,%xmm4
mulsd  %xmm3,%xmm4
cvttsd2si %xmm4,%eax
lea    (%rax,%rax,2),%ecx
lea    (%rax,%rcx,4),%eax
movslq %eax,%rbx
lea    0x13e1(%rip),%r14
movsd  (%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x8(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x10(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x18(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x20(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x28(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x30(%r14,%rbx,8),%xmm0
movsd  %xmm0,0x8(%rsp)
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm3
jb     14b0 <bessel_K0+0x380>
xorps  %xmm0,%xmm0
sqrtsd %xmm3,%xmm0
jmp    14dd <bessel_K0+0x3ad>
movapd %xmm3,%xmm0
movapd %xmm2,0x10(%rsp)
movsd  %xmm3,0x30(%rsp)
movsd  %xmm4,0x28(%rsp)
call   1050 <sqrt@plt>
movsd  0x28(%rsp),%xmm4
movsd  0x30(%rsp),%xmm3
movapd 0x10(%rsp),%xmm2
movsd  0x38(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x40(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x48(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x50(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x58(%r14,%rbx,8),%xmm1
movsd  0x8(%rsp),%xmm5
mulsd  %xmm0,%xmm5
movsd  %xmm5,0x8(%rsp)
mulsd  %xmm4,%xmm1
addsd  0x60(%r14,%rbx,8),%xmm1
mulsd  %xmm3,%xmm1
addsd  0xae9(%rip),%xmm1
addsd  %xmm2,%xmm1
movapd %xmm1,%xmm0
call   1030 <sin@plt>
mulsd  0x8(%rsp),%xmm0
add    $0x38,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@bessel_K0.a = internal constant [16 x double] [double 0xBD7A9BAF6987D325, double 0x3DF49A11BC2521CA, double 0xBE672DB9835A7D44, double 0x3ED21BB944DA29D8, double 0xBF321BB94524ECDF, double 0x3F845F306DC9C85B, double 0xBFC45F306DC9C883, double 0x3FE45F306DC9C883, double 0x3D920272AB0E1FED, double 0xBE0A6E672AC87C65, double 0x3E7BCE49C32D3D97, double 0xBEE3E99793B608B4, double 0x3F41A6206B7B4924, double 0xBF9075B1BBF4132B, double 0x3FC6BBCB41034286, double 0xBFB2E4D699CBD01F]
@bessel_K0.b = internal constant [112 x double] [double 0xBDC043C1CD717FBB, double 0xBDCA629703BBE9B6, double 0x3E08503C4E39802C, double 0x3E40E61E4061FAFC, double 0x3E67A800A37F368B, double 0x3E7C1DD1FDDE2FF7, double 0xBEA79BD78EFD28FD, double 0xBEE666FD82293004, double 0xBF14047483CDFDAA, double 0xBF367DA7862FAB01, double 0xBF4063EE0B30D127, double 0x3F826449BE999ADF, double 0x3FC2EC40EDB23F38, double 0x3F88F2556415F26B, double 0xBDC4D68176D88F0B, double 0xBE0C85D75BE9D5C0, double 0xBE31E1C094691468, double 0xBE1B71E4AE4ECACE, double 0x3E7FEFE2C821D2E4, double 0x3EAE04BAF27AE859, double 0x3EC76D723EC5CD1E, double 0xBEDDCA7150167682, double 0xBF228ED929D3EB6A, double 0xBF4D54D5EFFFD2A6, double 0xBF6776A570C84976, double 0x3F7260EB885DF2D6, double 0x3FC4CBE85DAC9448, double 0x3FC583295E605BFE, double 0x3E0102D786949C26, double 0x3E24A34BB775EBEC, double 0xBE2D50FB259C8289, double 0xBE754716682DBD15, double 0xBE92764CD6157779, double 0x3EABCCC3185C4C9D, double 0x3EE939B1480E13E0, double 0x3F074FE97E69833B, double 0xBF10A2980EEE30AA, double 0xBF592BF9BE3E920A, double 0xBF80117923FF5ECE, double 0xBF8658937118E10E, double 0x3FC44B6458AD8BCA, double 0x3FD5311520AC56F3, double 0xBE14DA6666CA4BE7, double 0xBE1FD37D1CE3C7FE, double 0x3E5DDF9A55889405, double 0x3E7ACCC1EF9F70CC, double 0xBEA13DB55822F040, double 0xBED15309C2A1DE6B, double 0x3EA739EFA8761EB4, double 0x3F1DBEC37825378F, double 0x3F3D65C79B05376D, double 0xBF48DBC93939545F, double 0xBF8B3DECE7F16848, double 0xBFA634DD7B06E994, double 0x3FBB69C46D100892, double 0x3FDE0A2FB44F012C, double 0x3E154B917F70C533, double 0xBE1697B743257C91, double 0xBE61394255C12D4E, double 0x3E729E86B31E1AE3, double 0x3EB0292F1B4E34C8, double 0xBEBF57961BDF533B, double 0xBF01489DED986226, double 0xBEE58C85C68A6C54, double 0x3F4CEEDF77AE4728, double 0x3F67A2583D0D7C7A, double 0xBF841A2827282E7F, double 0xBFB4EDE5301BBA06, double 0xBF942E9A3BA28F86, double 0x3FE0A066925FB222, double 0xBE0147E67464835E, double 0x3E2640BFF766D7F4, double 0x3E3052E72C723094, double 0xBE80E235D6DEFA9B, double 0x3E93E8AE98069F1F, double 0x3ED6527299CBD8DA, double 0xBEEEBE99DA212F55, double 0xBF2BC841FB1BB3F0, double 0x3F2383F1D142AF91, double 0x3F788582E74550AC, double 0x3F82C9FFEE0DF8D7, double 0xBFB5FF23A3C2FDB6, double 0xBFC93796D8CCA04B, double 0x3FDA5E9C1252F8D4, double 0x3DBD92088B12C2A3, double 0xBE04B1846D15D8D3, double 0x3E3EC7749092E3CB, double 0xBE60508ABBF6CA37, double 0xBEA0B85C509C0E7E, double 0x3ECE976A242BEF49, double 0x3EFB4161149348EF, double 0xBF2576494C7A8DAD, double 0xBF5269C78A43B4EE, double 0x3F6C0D4CA564EE32, double 0x3F9EE40048383993, double 0xBF98E8AF756B5389, double 0xBFD459AE71337C3E, double 0x3FC2747DA21F11DF, double 0x3D811EBA4D4F4488, double 0xBDE27CC3E3DAE052, double 0x3E2CE980FCA5BF25, double 0x3E573C23573F6D09, double 0xBEA1119233E8AEE2, double 0xBEB53BD000433D64, double 0x3F02A22BAADCD679, double 0x3F13A27C879EFD4F, double 0xBF5753DA0F614423, double 0xBF6D1B7AFC557BD9, double 0x3F9F266CE896B448, double 0x3FB2DB0D68C2D333, double 0xBFD13461CDEDAE93, double 0xBFC5387CD37CDDB1]
@bessel_K0.c = internal constant [126 x double] [double 0x3DE36CC33482D62E, double 0xBE13F840D92B30EB, double 0x3E38163629A2B412, double 0x3E6769DDD859233B, double 0xBE8AD154CCF8F59B, double 0xBEDA2A4E1594753D, double 0x3EFBE3CA4998FBA3, double 0x3F36905B5104D0DA, double 0xBF54FB2927D310D1, double 0xBF87E0B5C10C4B65, double 0x3FA374C450FF3E91, double 0x3FC0BDF1D5ED9F15, double 0xBFD3438A46B12235, double 0xBFC8EC17FE372EEF, double 0x3DC0691CF3727D4C, double 0xBDFE3131292E7072, double 0xBE2733739C785233, double 0x3E6C4B3971CDF058, double 0x3E97E37501005DD2, double 0xBED7766FEBE46111, double 0xBEF953C0CE292581, double 0x3F36EE43FA45D8B2, double 0x3F501700CDC2A7C8, double 0xBF896E938A041E22, double 0xBF8CA4458E62248A, double 0x3FC57346C22293D0, double 0x3F9854146D501FDF, double 0xBFD5BA0CCF037CE6, double 0x3DC2EA224A045187, double 0xBDB0687B9046471B, double 0xBE37A2B344EFBA7F, double 0x3E28D01FD1F83B4E, double 0x3EA623424446B5AC, double 0xBEA58F53EF2B50A7, double 0xBF0AB6DE8A1051FD, double 0x3F10A912DA9F47DA, double 0x3F62FC27424A9870, double 0xBF6C31271FE12081, double 0xBFA88E6A20E46049, double 0x3FB0C70CFD87BC18, double 0x3FD18AB620718A46, double 0xBFC62CCEE020D2F2, double 0x3DB48F733821923B, double 0x3DF8849385362B6B, double 0xBE2BC6F820FBDA21, double 0xBE6A7BA3EFB3902C, double 0x3E9B455F2E7445A3, double 0x3ED318B0271CA8A2, double 0xBF01B3FDB606DDEA, double 0xBF30E18787F20C79, double 0x3F5B6DF992201D72, double 0x3F7E1E2F5DE1AB9B, double 0xBFA3FDC72530EDBE, double 0xBFB3704580E577E0, double 0x3FD0958FBF7FF0A3, double 0x3FBE083E5764918C, double 0xBDA9B211A834B2CB, double 0x3DFBD35A393B25F6, double 0x3E1E3E6ACC73C261, double 0xBE6F1F1389E323B3, double 0xBE87B56527A1665C, double 0x3ED7B522A832EE3D, double 0x3EE63FDFF631C086, double 0xBF368865702B9B8F, double 0xBF32DDA2B25E24B7, double 0x3F869A8C80FEF0D7, double 0x3F5153294697EE15, double 0xBFC17D7B3975C5D8, double 0x3F9ACBF658C8EFD5, double 0x3FD14B0A5AB087D8, double 0xBDC106D684A7772D, double 0x3DDC3EC3D44041A5, double 0x3E35CC8728EA9F5B, double 0xBE523A48EFF3CC7B, double 0xBEA38948EE82A2BE, double 0x3EC0258F6D247440, double 0x3F06BF8C6FBA79A6, double 0xBF21F9AE0E4A8852, double 0xBF5E43D764FB53F8, double 0x3F7530EB9B9BFA68, double 0x3FA27DDF440565E0, double 0xBFB32D68AAEB7AB3, double 0xBFCA01CC87894BDB, double 0x3FC5EA3AD4225A43, double 0xBDB92BEE3D21E037, double 0xBDF314137530B2CD, double 0x3E30CEB8A11E1B80, double 0x3E63B88CF577E020, double 0xBE9FB6FB7879D9D0, double 0xBECB1AB722930CB2, double 0x3F03A8347F882BB3, double 0x3F26555CB9D346DB, double 0xBF5C48EBB8F6F940, double 0xBF729A226AF22EF7, double 0x3FA3083C3C33271F, double 0x3FA6FC574BA00DAE, double 0xBFCDEA0528DD9E01, double 0xBFB149ABA55D75AF, double 0x3D94D0DF98F9069F, double 0xBDFBD2F1AC19C5AC, double 0xBE037F8ABBE5CC09, double 0x3E6E5DBBED85A75A, double 0x3E632287D194EC69, double 0xBED66E99604FFC2F, double 0x3E7459E36F6304A3, double 0x3F3470DB508C1EE3, double 0xBF232E8B81FE205C, double 0xBF839FCC7551C881, double 0x3F7996428EE0B2BE, double 0x3FBD7981BF573A3C, double 0xBFADAAA5420D607D, double 0xBFCCD467E4DC807D, double 0x3DBE0B2573A0B88A, double 0xBDE85CF2F7FB3F65, double 0xBE32CB0D8377C390, double 0x3E5CCAF3D4BE5800, double 0x3EA05FCF918DADA8, double 0xBEC73194E17E5F16, double 0xBF026B8C975BCD59, double 0x3F2730D674235931, double 0x3F57AE29C7144642, double 0xBF788A152BF2FF29, double 0xBF9C41B365FE3BD1, double 0x3FB4571299064528, double 0x3FC3B0F8D459E289, double 0xBFC5EA59B440A933]
@bessel_K0.d = internal constant [52 x double] [double 0x3D07DC2F9A25ECA7, double 0xBD53149D63F1F825, double 0x3DA30659CC3FC657, double 0xBDFFCADA9E198DFB, double 0x3E6B4804138ECC30, double 0xBEF287DC2163327B, double 0x3FC4D8D7A58FA311, double 0x3D54C19ECE57DD2B, double 0xBDA36436CD269828, double 0x3DF88A616A135D28, double 0xBE5C4293F39F7C35, double 0x3ED3C0CA456E7AB2, double 0xBF7555555555551C, double 0x3D002CF8CAFF0542, double 0xBD51B4D99E00DD26, double 0x3DA2EA5EECD65C32, double 0xBDFFC99885D879D7, double 0x3E6B4801F195A42C, double 0xBEF287DC20E3A7D4, double 0x3FC4D8D7A58FA246, double 0x3D4F6C5AED5BB65C, double 0xBDA29D24ADE6A3BF, double 0x3DF87D71BB6A1AF1, double 0xBE5C425B8FEB369F, double 0x3ED3C0CA258753A5, double 0xBF75555555537A43, double 0x3CF7364FD4FD4581, double 0xBD50069A7921E2F9, double 0x3DA2A760F65E21B0, double 0xBDFFC3F1D5A8EA74, double 0x3E6B47F0863258C8, double 0xBEF287DC19A1644D, double 0x3FC4D8D7A58F8DDC, double 0x3D485ED11DF45A05, double 0xBDA18757DB857086, double 0x3DF85ABD7BCDBE77, double 0xBE5C414207130FD8, double 0x3ED3C0C9040F6B21, double 0xBF7555555535556E, double 0x3CF152C148731742, double 0xBD4CC69C57EE4E11, double 0x3DA24582FD53A5DB, double 0xBDFFB7AD22BEBEBF, double 0x3E6B47B8C6E5D461, double 0xBEF287DBF7A1218F, double 0x3FC4D8D7A58F02B9, double 0x3D436B35CD9541FA, double 0xBDA060E6CD4C9D22, double 0x3DF823AAA976E220, double 0xBE5C3EAA721F503D, double 0x3ED3C0C516370E23, double 0xBF755555549BECBD]
define double @bessel_K0(double %0) {
%2 = alloca double
%3 = alloca i32
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
store double %0, double* %2
%8 = load double, double* %2
%9 = fcmp olt double %8, 8.500000e-01
br i1 %9, label %10, label %62
10: ; preds = %1
%11 = load double, double* %2
%12 = load double, double* %2
%13 = fmul double %11, %12
store double %13, double* %4
%14 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 0)
%15 = load double, double* %4
%16 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 1)
%17 = call double @llvm.fmuladd.f64(double %14, double %15, double %16)
%18 = load double, double* %4
%19 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 2)
%20 = call double @llvm.fmuladd.f64(double %17, double %18, double %19)
%21 = load double, double* %4
%22 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 3)
%23 = call double @llvm.fmuladd.f64(double %20, double %21, double %22)
%24 = load double, double* %4
%25 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 4)
%26 = call double @llvm.fmuladd.f64(double %23, double %24, double %25)
%27 = load double, double* %4
%28 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 5)
%29 = call double @llvm.fmuladd.f64(double %26, double %27, double %28)
%30 = load double, double* %4
%31 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 6)
%32 = call double @llvm.fmuladd.f64(double %29, double %30, double %31)
%33 = load double, double* %4
%34 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 7)
%35 = call double @llvm.fmuladd.f64(double %32, double %33, double %34)
store double %35, double* %5
%36 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 8)
%37 = load double, double* %4
%38 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 9)
%39 = call double @llvm.fmuladd.f64(double %36, double %37, double %38)
%40 = load double, double* %4
%41 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 10)
%42 = call double @llvm.fmuladd.f64(double %39, double %40, double %41)
%43 = load double, double* %4
%44 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 11)
%45 = call double @llvm.fmuladd.f64(double %42, double %43, double %44)
%46 = load double, double* %4
%47 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 12)
%48 = call double @llvm.fmuladd.f64(double %45, double %46, double %47)
%49 = load double, double* %4
%50 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 13)
%51 = call double @llvm.fmuladd.f64(double %48, double %49, double %50)
%52 = load double, double* %4
%53 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 14)
%54 = call double @llvm.fmuladd.f64(double %51, double %52, double %53)
%55 = load double, double* %4
%56 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K0.a, i64 0, i64 15)
%57 = call double @llvm.fmuladd.f64(double %54, double %55, double %56)
%58 = load double, double* %5
%59 = load double, double* %2
%60 = call double @log(double %59)
%61 = call double @llvm.fmuladd.f64(double %58, double %60, double %57)
store double %61, double* %5
br label %392
62: ; preds = %1
%63 = load double, double* %2
%64 = fcmp olt double %63, 4.500000e+00
br i1 %64, label %65, label %175
65: ; preds = %62
%66 = load double, double* %2
%67 = load double, double* %2
%68 = fdiv double 4.000000e+00, %67
%69 = fsub double %66, %68
store double %69, double* %4
%70 = load double, double* %4
%71 = fadd double %70, 4.000000e+00
%72 = fptosi double %71 to i32
store i32 %72, i32* %3
%73 = load i32, i32* %3
%74 = sitofp i32 %73 to double
%75 = fsub double %74, 3.500000e+00
%76 = load double, double* %4
%77 = fsub double %76, %75
store double %77, double* %4
%78 = load i32, i32* %3
%79 = mul nsw i32 %78, 14
store i32 %79, i32* %3
%80 = load i32, i32* %3
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %81
%83 = load double, double* %82
%84 = load double, double* %4
%85 = load i32, i32* %3
%86 = add nsw i32 %85, 1
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %87
%89 = load double, double* %88
%90 = call double @llvm.fmuladd.f64(double %83, double %84, double %89)
%91 = load double, double* %4
%92 = load i32, i32* %3
%93 = add nsw i32 %92, 2
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %94
%96 = load double, double* %95
%97 = call double @llvm.fmuladd.f64(double %90, double %91, double %96)
%98 = load double, double* %4
%99 = load i32, i32* %3
%100 = add nsw i32 %99, 3
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %101
%103 = load double, double* %102
%104 = call double @llvm.fmuladd.f64(double %97, double %98, double %103)
%105 = load double, double* %4
%106 = load i32, i32* %3
%107 = add nsw i32 %106, 4
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %108
%110 = load double, double* %109
%111 = call double @llvm.fmuladd.f64(double %104, double %105, double %110)
%112 = load double, double* %4
%113 = load i32, i32* %3
%114 = add nsw i32 %113, 5
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %115
%117 = load double, double* %116
%118 = call double @llvm.fmuladd.f64(double %111, double %112, double %117)
%119 = load double, double* %4
%120 = load i32, i32* %3
%121 = add nsw i32 %120, 6
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.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* %4
%127 = load i32, i32* %3
%128 = add nsw i32 %127, 7
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.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* %4
%134 = load i32, i32* %3
%135 = add nsw i32 %134, 8
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.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* %4
%141 = load i32, i32* %3
%142 = add nsw i32 %141, 9
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.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* %4
%148 = load i32, i32* %3
%149 = add nsw i32 %148, 10
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.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* %4
%155 = load i32, i32* %3
%156 = add nsw i32 %155, 11
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.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* %4
%162 = load i32, i32* %3
%163 = add nsw i32 %162, 12
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.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* %4
%169 = load i32, i32* %3
%170 = add nsw i32 %169, 13
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %171
%173 = load double, double* %172
%174 = call double @llvm.fmuladd.f64(double %167, double %168, double %173)
store double %174, double* %5
br label %391
175: ; preds = %62
%176 = load double, double* %2
%177 = fcmp olt double %176, 1.250000e+01
br i1 %177, label %178, label %284
178: ; preds = %175
%179 = load double, double* %2
%180 = fptosi double %179 to i32
store i32 %180, i32* %3
%181 = load double, double* %2
%182 = load i32, i32* %3
%183 = sitofp i32 %182 to double
%184 = fadd double %183, 5.000000e-01
%185 = fsub double %181, %184
store double %185, double* %4
%186 = load i32, i32* %3
%187 = sub nsw i32 %186, 4
%188 = mul nsw i32 14, %187
store i32 %188, i32* %3
%189 = load i32, i32* %3
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %190
%192 = load double, double* %191
%193 = load double, double* %4
%194 = load i32, i32* %3
%195 = add nsw i32 %194, 1
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %196
%198 = load double, double* %197
%199 = call double @llvm.fmuladd.f64(double %192, double %193, double %198)
%200 = load double, double* %4
%201 = load i32, i32* %3
%202 = add nsw i32 %201, 2
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %203
%205 = load double, double* %204
%206 = call double @llvm.fmuladd.f64(double %199, double %200, double %205)
%207 = load double, double* %4
%208 = load i32, i32* %3
%209 = add nsw i32 %208, 3
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %210
%212 = load double, double* %211
%213 = call double @llvm.fmuladd.f64(double %206, double %207, double %212)
%214 = load double, double* %4
%215 = load i32, i32* %3
%216 = add nsw i32 %215, 4
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %217
%219 = load double, double* %218
%220 = call double @llvm.fmuladd.f64(double %213, double %214, double %219)
%221 = load double, double* %4
%222 = load i32, i32* %3
%223 = add nsw i32 %222, 5
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %224
%226 = load double, double* %225
%227 = call double @llvm.fmuladd.f64(double %220, double %221, double %226)
%228 = load double, double* %4
%229 = load i32, i32* %3
%230 = add nsw i32 %229, 6
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %231
%233 = load double, double* %232
%234 = call double @llvm.fmuladd.f64(double %227, double %228, double %233)
%235 = load double, double* %4
%236 = load i32, i32* %3
%237 = add nsw i32 %236, 7
%238 = sext i32 %237 to i64
%239 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %238
%240 = load double, double* %239
%241 = call double @llvm.fmuladd.f64(double %234, double %235, double %240)
%242 = load double, double* %4
%243 = load i32, i32* %3
%244 = add nsw i32 %243, 8
%245 = sext i32 %244 to i64
%246 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %245
%247 = load double, double* %246
%248 = call double @llvm.fmuladd.f64(double %241, double %242, double %247)
%249 = load double, double* %4
%250 = load i32, i32* %3
%251 = add nsw i32 %250, 9
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %252
%254 = load double, double* %253
%255 = call double @llvm.fmuladd.f64(double %248, double %249, double %254)
%256 = load double, double* %4
%257 = load i32, i32* %3
%258 = add nsw i32 %257, 10
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %259
%261 = load double, double* %260
%262 = call double @llvm.fmuladd.f64(double %255, double %256, double %261)
%263 = load double, double* %4
%264 = load i32, i32* %3
%265 = add nsw i32 %264, 11
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %266
%268 = load double, double* %267
%269 = call double @llvm.fmuladd.f64(double %262, double %263, double %268)
%270 = load double, double* %4
%271 = load i32, i32* %3
%272 = add nsw i32 %271, 12
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %273
%275 = load double, double* %274
%276 = call double @llvm.fmuladd.f64(double %269, double %270, double %275)
%277 = load double, double* %4
%278 = load i32, i32* %3
%279 = add nsw i32 %278, 13
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %280
%282 = load double, double* %281
%283 = call double @llvm.fmuladd.f64(double %276, double %277, double %282)
store double %283, double* %5
br label %390
284: ; preds = %175
%285 = load double, double* %2
%286 = fdiv double 2.400000e+01, %285
store double %286, double* %6
%287 = load double, double* %6
%288 = load double, double* %6
%289 = fmul double %287, %288
store double %289, double* %4
%290 = load double, double* %4
%291 = fptosi double %290 to i32
%292 = mul nsw i32 13, %291
store i32 %292, i32* %3
%293 = load i32, i32* %3
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %294
%296 = load double, double* %295
%297 = load double, double* %4
%298 = load i32, i32* %3
%299 = add nsw i32 %298, 1
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %300
%302 = load double, double* %301
%303 = call double @llvm.fmuladd.f64(double %296, double %297, double %302)
%304 = load double, double* %4
%305 = load i32, i32* %3
%306 = add nsw i32 %305, 2
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %307
%309 = load double, double* %308
%310 = call double @llvm.fmuladd.f64(double %303, double %304, double %309)
%311 = load double, double* %4
%312 = load i32, i32* %3
%313 = add nsw i32 %312, 3
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %314
%316 = load double, double* %315
%317 = call double @llvm.fmuladd.f64(double %310, double %311, double %316)
%318 = load double, double* %4
%319 = load i32, i32* %3
%320 = add nsw i32 %319, 4
%321 = sext i32 %320 to i64
%322 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %321
%323 = load double, double* %322
%324 = call double @llvm.fmuladd.f64(double %317, double %318, double %323)
%325 = load double, double* %4
%326 = load i32, i32* %3
%327 = add nsw i32 %326, 5
%328 = sext i32 %327 to i64
%329 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %328
%330 = load double, double* %329
%331 = call double @llvm.fmuladd.f64(double %324, double %325, double %330)
%332 = load double, double* %4
%333 = load i32, i32* %3
%334 = add nsw i32 %333, 6
%335 = sext i32 %334 to i64
%336 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %335
%337 = load double, double* %336
%338 = call double @llvm.fmuladd.f64(double %331, double %332, double %337)
%339 = load double, double* %6
%340 = call double @sqrt(double %339)
%341 = fmul double %338, %340
store double %341, double* %5
%342 = load i32, i32* %3
%343 = add nsw i32 %342, 7
%344 = sext i32 %343 to i64
%345 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %344
%346 = load double, double* %345
%347 = load double, double* %4
%348 = load i32, i32* %3
%349 = add nsw i32 %348, 8
%350 = sext i32 %349 to i64
%351 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %350
%352 = load double, double* %351
%353 = call double @llvm.fmuladd.f64(double %346, double %347, double %352)
%354 = load double, double* %4
%355 = load i32, i32* %3
%356 = add nsw i32 %355, 9
%357 = sext i32 %356 to i64
%358 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %357
%359 = load double, double* %358
%360 = call double @llvm.fmuladd.f64(double %353, double %354, double %359)
%361 = load double, double* %4
%362 = load i32, i32* %3
%363 = add nsw i32 %362, 10
%364 = sext i32 %363 to i64
%365 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %364
%366 = load double, double* %365
%367 = call double @llvm.fmuladd.f64(double %360, double %361, double %366)
%368 = load double, double* %4
%369 = load i32, i32* %3
%370 = add nsw i32 %369, 11
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %371
%373 = load double, double* %372
%374 = call double @llvm.fmuladd.f64(double %367, double %368, double %373)
%375 = load double, double* %4
%376 = load i32, i32* %3
%377 = add nsw i32 %376, 12
%378 = sext i32 %377 to i64
%379 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %378
%380 = load double, double* %379
%381 = call double @llvm.fmuladd.f64(double %374, double %375, double %380)
%382 = load double, double* %6
%383 = call double @llvm.fmuladd.f64(double %381, double %382, double 0xBFE921FB54442D18)
store double %383, double* %7
%384 = load double, double* %2
%385 = load double, double* %7
%386 = fadd double %384, %385
%387 = call double @sin(double %386)
%388 = load double, double* %5
%389 = fmul double %388, %387
store double %389, double* %5
br label %390
390: ; preds = %284, %178
br label %391
391: ; preds = %390, %65
br label %392
392: ; preds = %391, %10
%393 = load double, double* %5
ret double %393
}

LLVM IR (-O2):
@bessel_K0.b = internal unnamed_addr constant [112 x double] [double 0xBDC043C1CD717FBB, double 0xBDCA629703BBE9B6, double 0x3E08503C4E39802C, double 0x3E40E61E4061FAFC, double 0x3E67A800A37F368B, double 0x3E7C1DD1FDDE2FF7, double 0xBEA79BD78EFD28FD, double 0xBEE666FD82293004, double 0xBF14047483CDFDAA, double 0xBF367DA7862FAB01, double 0xBF4063EE0B30D127, double 0x3F826449BE999ADF, double 0x3FC2EC40EDB23F38, double 0x3F88F2556415F26B, double 0xBDC4D68176D88F0B, double 0xBE0C85D75BE9D5C0, double 0xBE31E1C094691468, double 0xBE1B71E4AE4ECACE, double 0x3E7FEFE2C821D2E4, double 0x3EAE04BAF27AE859, double 0x3EC76D723EC5CD1E, double 0xBEDDCA7150167682, double 0xBF228ED929D3EB6A, double 0xBF4D54D5EFFFD2A6, double 0xBF6776A570C84976, double 0x3F7260EB885DF2D6, double 0x3FC4CBE85DAC9448, double 0x3FC583295E605BFE, double 0x3E0102D786949C26, double 0x3E24A34BB775EBEC, double 0xBE2D50FB259C8289, double 0xBE754716682DBD15, double 0xBE92764CD6157779, double 0x3EABCCC3185C4C9D, double 0x3EE939B1480E13E0, double 0x3F074FE97E69833B, double 0xBF10A2980EEE30AA, double 0xBF592BF9BE3E920A, double 0xBF80117923FF5ECE, double 0xBF8658937118E10E, double 0x3FC44B6458AD8BCA, double 0x3FD5311520AC56F3, double 0xBE14DA6666CA4BE7, double 0xBE1FD37D1CE3C7FE, double 0x3E5DDF9A55889405, double 0x3E7ACCC1EF9F70CC, double 0xBEA13DB55822F040, double 0xBED15309C2A1DE6B, double 0x3EA739EFA8761EB4, double 0x3F1DBEC37825378F, double 0x3F3D65C79B05376D, double 0xBF48DBC93939545F, double 0xBF8B3DECE7F16848, double 0xBFA634DD7B06E994, double 0x3FBB69C46D100892, double 0x3FDE0A2FB44F012C, double 0x3E154B917F70C533, double 0xBE1697B743257C91, double 0xBE61394255C12D4E, double 0x3E729E86B31E1AE3, double 0x3EB0292F1B4E34C8, double 0xBEBF57961BDF533B, double 0xBF01489DED986226, double 0xBEE58C85C68A6C54, double 0x3F4CEEDF77AE4728, double 0x3F67A2583D0D7C7A, double 0xBF841A2827282E7F, double 0xBFB4EDE5301BBA06, double 0xBF942E9A3BA28F86, double 0x3FE0A066925FB222, double 0xBE0147E67464835E, double 0x3E2640BFF766D7F4, double 0x3E3052E72C723094, double 0xBE80E235D6DEFA9B, double 0x3E93E8AE98069F1F, double 0x3ED6527299CBD8DA, double 0xBEEEBE99DA212F55, double 0xBF2BC841FB1BB3F0, double 0x3F2383F1D142AF91, double 0x3F788582E74550AC, double 0x3F82C9FFEE0DF8D7, double 0xBFB5FF23A3C2FDB6, double 0xBFC93796D8CCA04B, double 0x3FDA5E9C1252F8D4, double 0x3DBD92088B12C2A3, double 0xBE04B1846D15D8D3, double 0x3E3EC7749092E3CB, double 0xBE60508ABBF6CA37, double 0xBEA0B85C509C0E7E, double 0x3ECE976A242BEF49, double 0x3EFB4161149348EF, double 0xBF2576494C7A8DAD, double 0xBF5269C78A43B4EE, double 0x3F6C0D4CA564EE32, double 0x3F9EE40048383993, double 0xBF98E8AF756B5389, double 0xBFD459AE71337C3E, double 0x3FC2747DA21F11DF, double 0x3D811EBA4D4F4488, double 0xBDE27CC3E3DAE052, double 0x3E2CE980FCA5BF25, double 0x3E573C23573F6D09, double 0xBEA1119233E8AEE2, double 0xBEB53BD000433D64, double 0x3F02A22BAADCD679, double 0x3F13A27C879EFD4F, double 0xBF5753DA0F614423, double 0xBF6D1B7AFC557BD9, double 0x3F9F266CE896B448, double 0x3FB2DB0D68C2D333, double 0xBFD13461CDEDAE93, double 0xBFC5387CD37CDDB1]
@bessel_K0.c = internal unnamed_addr constant [126 x double] [double 0x3DE36CC33482D62E, double 0xBE13F840D92B30EB, double 0x3E38163629A2B412, double 0x3E6769DDD859233B, double 0xBE8AD154CCF8F59B, double 0xBEDA2A4E1594753D, double 0x3EFBE3CA4998FBA3, double 0x3F36905B5104D0DA, double 0xBF54FB2927D310D1, double 0xBF87E0B5C10C4B65, double 0x3FA374C450FF3E91, double 0x3FC0BDF1D5ED9F15, double 0xBFD3438A46B12235, double 0xBFC8EC17FE372EEF, double 0x3DC0691CF3727D4C, double 0xBDFE3131292E7072, double 0xBE2733739C785233, double 0x3E6C4B3971CDF058, double 0x3E97E37501005DD2, double 0xBED7766FEBE46111, double 0xBEF953C0CE292581, double 0x3F36EE43FA45D8B2, double 0x3F501700CDC2A7C8, double 0xBF896E938A041E22, double 0xBF8CA4458E62248A, double 0x3FC57346C22293D0, double 0x3F9854146D501FDF, double 0xBFD5BA0CCF037CE6, double 0x3DC2EA224A045187, double 0xBDB0687B9046471B, double 0xBE37A2B344EFBA7F, double 0x3E28D01FD1F83B4E, double 0x3EA623424446B5AC, double 0xBEA58F53EF2B50A7, double 0xBF0AB6DE8A1051FD, double 0x3F10A912DA9F47DA, double 0x3F62FC27424A9870, double 0xBF6C31271FE12081, double 0xBFA88E6A20E46049, double 0x3FB0C70CFD87BC18, double 0x3FD18AB620718A46, double 0xBFC62CCEE020D2F2, double 0x3DB48F733821923B, double 0x3DF8849385362B6B, double 0xBE2BC6F820FBDA21, double 0xBE6A7BA3EFB3902C, double 0x3E9B455F2E7445A3, double 0x3ED318B0271CA8A2, double 0xBF01B3FDB606DDEA, double 0xBF30E18787F20C79, double 0x3F5B6DF992201D72, double 0x3F7E1E2F5DE1AB9B, double 0xBFA3FDC72530EDBE, double 0xBFB3704580E577E0, double 0x3FD0958FBF7FF0A3, double 0x3FBE083E5764918C, double 0xBDA9B211A834B2CB, double 0x3DFBD35A393B25F6, double 0x3E1E3E6ACC73C261, double 0xBE6F1F1389E323B3, double 0xBE87B56527A1665C, double 0x3ED7B522A832EE3D, double 0x3EE63FDFF631C086, double 0xBF368865702B9B8F, double 0xBF32DDA2B25E24B7, double 0x3F869A8C80FEF0D7, double 0x3F5153294697EE15, double 0xBFC17D7B3975C5D8, double 0x3F9ACBF658C8EFD5, double 0x3FD14B0A5AB087D8, double 0xBDC106D684A7772D, double 0x3DDC3EC3D44041A5, double 0x3E35CC8728EA9F5B, double 0xBE523A48EFF3CC7B, double 0xBEA38948EE82A2BE, double 0x3EC0258F6D247440, double 0x3F06BF8C6FBA79A6, double 0xBF21F9AE0E4A8852, double 0xBF5E43D764FB53F8, double 0x3F7530EB9B9BFA68, double 0x3FA27DDF440565E0, double 0xBFB32D68AAEB7AB3, double 0xBFCA01CC87894BDB, double 0x3FC5EA3AD4225A43, double 0xBDB92BEE3D21E037, double 0xBDF314137530B2CD, double 0x3E30CEB8A11E1B80, double 0x3E63B88CF577E020, double 0xBE9FB6FB7879D9D0, double 0xBECB1AB722930CB2, double 0x3F03A8347F882BB3, double 0x3F26555CB9D346DB, double 0xBF5C48EBB8F6F940, double 0xBF729A226AF22EF7, double 0x3FA3083C3C33271F, double 0x3FA6FC574BA00DAE, double 0xBFCDEA0528DD9E01, double 0xBFB149ABA55D75AF, double 0x3D94D0DF98F9069F, double 0xBDFBD2F1AC19C5AC, double 0xBE037F8ABBE5CC09, double 0x3E6E5DBBED85A75A, double 0x3E632287D194EC69, double 0xBED66E99604FFC2F, double 0x3E7459E36F6304A3, double 0x3F3470DB508C1EE3, double 0xBF232E8B81FE205C, double 0xBF839FCC7551C881, double 0x3F7996428EE0B2BE, double 0x3FBD7981BF573A3C, double 0xBFADAAA5420D607D, double 0xBFCCD467E4DC807D, double 0x3DBE0B2573A0B88A, double 0xBDE85CF2F7FB3F65, double 0xBE32CB0D8377C390, double 0x3E5CCAF3D4BE5800, double 0x3EA05FCF918DADA8, double 0xBEC73194E17E5F16, double 0xBF026B8C975BCD59, double 0x3F2730D674235931, double 0x3F57AE29C7144642, double 0xBF788A152BF2FF29, double 0xBF9C41B365FE3BD1, double 0x3FB4571299064528, double 0x3FC3B0F8D459E289, double 0xBFC5EA59B440A933]
@bessel_K0.d = internal unnamed_addr constant [52 x double] [double 0x3D07DC2F9A25ECA7, double 0xBD53149D63F1F825, double 0x3DA30659CC3FC657, double 0xBDFFCADA9E198DFB, double 0x3E6B4804138ECC30, double 0xBEF287DC2163327B, double 0x3FC4D8D7A58FA311, double 0x3D54C19ECE57DD2B, double 0xBDA36436CD269828, double 0x3DF88A616A135D28, double 0xBE5C4293F39F7C35, double 0x3ED3C0CA456E7AB2, double 0xBF7555555555551C, double 0x3D002CF8CAFF0542, double 0xBD51B4D99E00DD26, double 0x3DA2EA5EECD65C32, double 0xBDFFC99885D879D7, double 0x3E6B4801F195A42C, double 0xBEF287DC20E3A7D4, double 0x3FC4D8D7A58FA246, double 0x3D4F6C5AED5BB65C, double 0xBDA29D24ADE6A3BF, double 0x3DF87D71BB6A1AF1, double 0xBE5C425B8FEB369F, double 0x3ED3C0CA258753A5, double 0xBF75555555537A43, double 0x3CF7364FD4FD4581, double 0xBD50069A7921E2F9, double 0x3DA2A760F65E21B0, double 0xBDFFC3F1D5A8EA74, double 0x3E6B47F0863258C8, double 0xBEF287DC19A1644D, double 0x3FC4D8D7A58F8DDC, double 0x3D485ED11DF45A05, double 0xBDA18757DB857086, double 0x3DF85ABD7BCDBE77, double 0xBE5C414207130FD8, double 0x3ED3C0C9040F6B21, double 0xBF7555555535556E, double 0x3CF152C148731742, double 0xBD4CC69C57EE4E11, double 0x3DA24582FD53A5DB, double 0xBDFFB7AD22BEBEBF, double 0x3E6B47B8C6E5D461, double 0xBEF287DBF7A1218F, double 0x3FC4D8D7A58F02B9, double 0x3D436B35CD9541FA, double 0xBDA060E6CD4C9D22, double 0x3DF823AAA976E220, double 0xBE5C3EAA721F503D, double 0x3ED3C0C516370E23, double 0xBF755555549BECBD]
define double @bessel_K0(double %0) {
%2 = fcmp olt double %0, 8.500000e-01
br i1 %2, label %3, label %21
3: ; preds = %1
%4 = fmul double %0, %0
%5 = tail call double @llvm.fmuladd.f64(double %4, double 0xBD7A9BAF6987D325, double 0x3DF49A11BC2521CA)
%6 = tail call double @llvm.fmuladd.f64(double %5, double %4, double 0xBE672DB9835A7D44)
%7 = tail call double @llvm.fmuladd.f64(double %6, double %4, double 0x3ED21BB944DA29D8)
%8 = tail call double @llvm.fmuladd.f64(double %7, double %4, double 0xBF321BB94524ECDF)
%9 = tail call double @llvm.fmuladd.f64(double %8, double %4, double 0x3F845F306DC9C85B)
%10 = tail call double @llvm.fmuladd.f64(double %9, double %4, double 0xBFC45F306DC9C883)
%11 = tail call double @llvm.fmuladd.f64(double %10, double %4, double 0x3FE45F306DC9C883)
%12 = tail call double @llvm.fmuladd.f64(double %4, double 0x3D920272AB0E1FED, double 0xBE0A6E672AC87C65)
%13 = tail call double @llvm.fmuladd.f64(double %12, double %4, double 0x3E7BCE49C32D3D97)
%14 = tail call double @llvm.fmuladd.f64(double %13, double %4, double 0xBEE3E99793B608B4)
%15 = tail call double @llvm.fmuladd.f64(double %14, double %4, double 0x3F41A6206B7B4924)
%16 = tail call double @llvm.fmuladd.f64(double %15, double %4, double 0xBF9075B1BBF4132B)
%17 = tail call double @llvm.fmuladd.f64(double %16, double %4, double 0x3FC6BBCB41034286)
%18 = tail call double @llvm.fmuladd.f64(double %17, double %4, double 0xBFB2E4D699CBD01F)
%19 = tail call double @log(double %0)
%20 = tail call double @llvm.fmuladd.f64(double %11, double %19, double %18)
br label %250
21: ; preds = %1
%22 = fcmp olt double %0, 4.500000e+00
br i1 %22, label %23, label %100
23: ; preds = %21
%24 = fdiv double 4.000000e+00, %0
%25 = fsub double %0, %24
%26 = fadd double %25, 4.000000e+00
%27 = fptosi double %26 to i32
%28 = sitofp i32 %27 to double
%29 = fadd double %28, -3.500000e+00
%30 = fsub double %25, %29
%31 = mul nsw i32 %27, 14
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %32
%34 = load double, double* %33
%35 = or i32 %31, 1
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %36
%38 = load double, double* %37
%39 = tail call double @llvm.fmuladd.f64(double %34, double %30, double %38)
%40 = add nsw i32 %31, 2
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %41
%43 = load double, double* %42
%44 = tail call double @llvm.fmuladd.f64(double %39, double %30, double %43)
%45 = add nsw i32 %31, 3
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %46
%48 = load double, double* %47
%49 = tail call double @llvm.fmuladd.f64(double %44, double %30, double %48)
%50 = add nsw i32 %31, 4
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %51
%53 = load double, double* %52
%54 = tail call double @llvm.fmuladd.f64(double %49, double %30, double %53)
%55 = add nsw i32 %31, 5
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %56
%58 = load double, double* %57
%59 = tail call double @llvm.fmuladd.f64(double %54, double %30, double %58)
%60 = add nsw i32 %31, 6
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %61
%63 = load double, double* %62
%64 = tail call double @llvm.fmuladd.f64(double %59, double %30, double %63)
%65 = add nsw i32 %31, 7
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %66
%68 = load double, double* %67
%69 = tail call double @llvm.fmuladd.f64(double %64, double %30, double %68)
%70 = add nsw i32 %31, 8
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %71
%73 = load double, double* %72
%74 = tail call double @llvm.fmuladd.f64(double %69, double %30, double %73)
%75 = add nsw i32 %31, 9
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %76
%78 = load double, double* %77
%79 = tail call double @llvm.fmuladd.f64(double %74, double %30, double %78)
%80 = add nsw i32 %31, 10
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %81
%83 = load double, double* %82
%84 = tail call double @llvm.fmuladd.f64(double %79, double %30, double %83)
%85 = add nsw i32 %31, 11
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %86
%88 = load double, double* %87
%89 = tail call double @llvm.fmuladd.f64(double %84, double %30, double %88)
%90 = add nsw i32 %31, 12
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %91
%93 = load double, double* %92
%94 = tail call double @llvm.fmuladd.f64(double %89, double %30, double %93)
%95 = add nsw i32 %31, 13
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [112 x double], [112 x double]* @bessel_K0.b, i64 0, i64 %96
%98 = load double, double* %97
%99 = tail call double @llvm.fmuladd.f64(double %94, double %30, double %98)
br label %250
100: ; preds = %21
%101 = fcmp olt double %0, 1.250000e+01
br i1 %101, label %102, label %177
102: ; preds = %100
%103 = fptosi double %0 to i32
%104 = sitofp i32 %103 to double
%105 = fadd double %104, 5.000000e-01
%106 = fsub double %0, %105
%107 = mul i32 %103, 14
%108 = add i32 %107, -56
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %109
%111 = load double, double* %110
%112 = add i32 %107, -55
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %113
%115 = load double, double* %114
%116 = tail call double @llvm.fmuladd.f64(double %111, double %106, double %115)
%117 = add i32 %107, -54
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %118
%120 = load double, double* %119
%121 = tail call double @llvm.fmuladd.f64(double %116, double %106, double %120)
%122 = add i32 %107, -53
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %123
%125 = load double, double* %124
%126 = tail call double @llvm.fmuladd.f64(double %121, double %106, double %125)
%127 = add i32 %107, -52
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %128
%130 = load double, double* %129
%131 = tail call double @llvm.fmuladd.f64(double %126, double %106, double %130)
%132 = add i32 %107, -51
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %133
%135 = load double, double* %134
%136 = tail call double @llvm.fmuladd.f64(double %131, double %106, double %135)
%137 = add i32 %107, -50
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %138
%140 = load double, double* %139
%141 = tail call double @llvm.fmuladd.f64(double %136, double %106, double %140)
%142 = add i32 %107, -49
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %143
%145 = load double, double* %144
%146 = tail call double @llvm.fmuladd.f64(double %141, double %106, double %145)
%147 = add i32 %107, -48
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %148
%150 = load double, double* %149
%151 = tail call double @llvm.fmuladd.f64(double %146, double %106, double %150)
%152 = add i32 %107, -47
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %153
%155 = load double, double* %154
%156 = tail call double @llvm.fmuladd.f64(double %151, double %106, double %155)
%157 = add i32 %107, -46
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %158
%160 = load double, double* %159
%161 = tail call double @llvm.fmuladd.f64(double %156, double %106, double %160)
%162 = add i32 %107, -45
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %163
%165 = load double, double* %164
%166 = tail call double @llvm.fmuladd.f64(double %161, double %106, double %165)
%167 = add i32 %107, -44
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %168
%170 = load double, double* %169
%171 = tail call double @llvm.fmuladd.f64(double %166, double %106, double %170)
%172 = add i32 %107, -43
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [126 x double], [126 x double]* @bessel_K0.c, i64 0, i64 %173
%175 = load double, double* %174
%176 = tail call double @llvm.fmuladd.f64(double %171, double %106, double %175)
br label %250
177: ; preds = %100
%178 = fdiv double 2.400000e+01, %0
%179 = fmul double %178, %178
%180 = fptosi double %179 to i32
%181 = mul nsw i32 %180, 13
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %182
%184 = load double, double* %183
%185 = add nsw i32 %181, 1
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %186
%188 = load double, double* %187
%189 = tail call double @llvm.fmuladd.f64(double %184, double %179, double %188)
%190 = add nsw i32 %181, 2
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %191
%193 = load double, double* %192
%194 = tail call double @llvm.fmuladd.f64(double %189, double %179, double %193)
%195 = add nsw i32 %181, 3
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %196
%198 = load double, double* %197
%199 = tail call double @llvm.fmuladd.f64(double %194, double %179, double %198)
%200 = add nsw i32 %181, 4
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %201
%203 = load double, double* %202
%204 = tail call double @llvm.fmuladd.f64(double %199, double %179, double %203)
%205 = add nsw i32 %181, 5
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %206
%208 = load double, double* %207
%209 = tail call double @llvm.fmuladd.f64(double %204, double %179, double %208)
%210 = add nsw i32 %181, 6
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %211
%213 = load double, double* %212
%214 = tail call double @llvm.fmuladd.f64(double %209, double %179, double %213)
%215 = tail call double @sqrt(double %178)
%216 = fmul double %214, %215
%217 = add nsw i32 %181, 7
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %218
%220 = load double, double* %219
%221 = add nsw i32 %181, 8
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %222
%224 = load double, double* %223
%225 = tail call double @llvm.fmuladd.f64(double %220, double %179, double %224)
%226 = add nsw i32 %181, 9
%227 = sext i32 %226 to i64
%228 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %227
%229 = load double, double* %228
%230 = tail call double @llvm.fmuladd.f64(double %225, double %179, double %229)
%231 = add nsw i32 %181, 10
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %232
%234 = load double, double* %233
%235 = tail call double @llvm.fmuladd.f64(double %230, double %179, double %234)
%236 = add nsw i32 %181, 11
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %237
%239 = load double, double* %238
%240 = tail call double @llvm.fmuladd.f64(double %235, double %179, double %239)
%241 = add nsw i32 %181, 12
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds [52 x double], [52 x double]* @bessel_K0.d, i64 0, i64 %242
%244 = load double, double* %243
%245 = tail call double @llvm.fmuladd.f64(double %240, double %179, double %244)
%246 = tail call double @llvm.fmuladd.f64(double %245, double %178, double 0xBFE921FB54442D18)
%247 = fadd double %246, %0
%248 = tail call double @sin(double %247)
%249 = fmul double %216, %248
br label %250
250: ; preds = %23, %177, %102, %3
%251 = phi double [ %20, %3 ], [ %99, %23 ], [ %176, %102 ], [ %249, %177 ]
ret double %251
}