#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 cos(double);
int fabs(double);
double const pow(double, int);
double sin(double);
double sqrt(double);
double Jinc(double x) {
  x *= 2 * 3.14159265358979323846;
  if (x < 1e-9) {
    return 1. - x * x / 8.;
  }
  static const double a1[] = {0.1171875,
                              -0.1441955566406250,
                              0.6765925884246826,
                              -6.883914268109947,
                              1.215978918765359e2,
                              -3.302272294480852e3,
                              1.276412726461746e5,
                              -6.656367718817688e6,
                              4.502786003050393e8,
                              -3.833857520742790e10,
                              4.011838599133198e12,
                              -5.060568503314727e14,
                              7.572616461117958e16,
                              -1.326257285320556e19};
  static const double b1[] = {
      -0.1025390625,         0.2775764465332031,    -1.993531733751297,
      2.724882731126854e1,   -6.038440767050702e2,  1.971837591223663e4,
      -8.902978767070678e5,  5.310411010968522e7,   -4.043620325107754e9,
      3.827011346598605e11,  -4.406481417852278e13, 6.065091351222699e15,
      -9.833883876590679e17, 1.855045211579828e20};
  if (x <= 0.0) {
    return 1.0;
  }
  if (x <= 12.0) {
    double x2 = x * x;
    double j1 = 1.0;
    double r = 1.0;
    int k;
    for (k = 1; k <= 30; k++) {
      r *= -0.25 * x2 / (k * (k + 1));
      j1 += r;
      if (fabs(r) < fabs(j1) * 1e-15)
        break;
    }
    return j1;
  } else {
    int kz;
    if (x >= 50.0)
      kz = 8;
    else if (x >= 35.0)
      kz = 10;
    else
      kz = 12;
    double cu = sqrt(0.63661977236758134308 / x);
    double t2 = x - 0.75 * 3.14159265358979323846;
    double p1 = 1.0;
    double q1 = 0.375 / x;
    int k;
    for (k = 0; k < kz; k++) {
      p1 += a1[k] * pow(x, -2 * k - 2);
      q1 += b1[k] * pow(x, -2 * k - 3);
    }
    return 2.0 * cu * (p1 * cos(t2) - q1 * sin(t2)) / x;
  }
}


x86 assembly (clang, -O0):
<Jinc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  0xea0(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xe86(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    11b1 <Jinc+0x61>
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xec9(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  0xe8d(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1493 <Jinc+0x343>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     11d1 <Jinc+0x81>
movsd  0xe69(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1493 <Jinc+0x343>
movsd  0xe37(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     12bb <Jinc+0x16b>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe35(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe28(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x1,-0x2c(%rbp)
cmpl   $0x1e,-0x2c(%rbp)
jg     12ac <Jinc+0x15c>
movsd  0xe32(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mov    -0x2c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1030 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1030 <fabs@plt>
movsd  -0x60(%rbp),%xmm1
cvtsi2sd %eax,%xmm0
movsd  0xdca(%rip),%xmm2
mulsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1299 <Jinc+0x149>
jmp    12ac <Jinc+0x15c>
jmp    129e <Jinc+0x14e>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1214 <Jinc+0xc4>
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1493 <Jinc+0x343>
movsd  -0x10(%rbp),%xmm0
movsd  0xd50(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     12de <Jinc+0x18e>
movl   $0x8,-0x30(%rbp)
jmp    130d <Jinc+0x1bd>
movsd  -0x10(%rbp),%xmm0
movsd  0xd35(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1301 <Jinc+0x1b1>
movl   $0xa,-0x30(%rbp)
jmp    1308 <Jinc+0x1b8>
movl   $0xc,-0x30(%rbp)
jmp    130d <Jinc+0x1bd>
movsd  0xd2b(%rip),%xmm0
divsd  -0x10(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xd07(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xcee(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xcd9(%rip),%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1400 <Jinc+0x2b0>
movslq -0x54(%rbp),%rcx
lea    0xcf9(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x10(%rbp),%xmm0
imul   $0xfffffffe,-0x54(%rbp),%edi
sub    $0x2,%edi
call   1060 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x70(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movslq -0x54(%rbp),%rcx
lea    0xd26(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
imul   $0xfffffffe,-0x54(%rbp),%edi
sub    $0x3,%edi
call   1060 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x68(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1360 <Jinc+0x210>
movsd  0xc40(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0x90(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm3
movaps %xmm0,%xmm4
movsd  -0x78(%rbp),%xmm0
mulsd  %xmm4,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Jinc>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x30,%rsp
movapd %xmm0,%xmm2
mulsd  0xe97(%rip),%xmm2
movsd  0xe97(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    1190 <Jinc+0x40>
mulsd  %xmm2,%xmm2
mulsd  0xed5(%rip),%xmm2
addsd  0xe85(%rip),%xmm2
jmp    13b5 <Jinc+0x265>
xorpd  %xmm0,%xmm0
ucomisd %xmm2,%xmm0
jae    11d0 <Jinc+0x80>
movsd  0xe76(%rip),%xmm0
ucomisd %xmm2,%xmm0
jae    11dd <Jinc+0x8d>
movsd  0xe80(%rip),%xmm0
divsd  %xmm2,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm2,(%rsp)
jb     1289 <Jinc+0x139>
sqrtsd %xmm0,%xmm0
jmp    1293 <Jinc+0x143>
movsd  0xe38(%rip),%xmm2
jmp    13b5 <Jinc+0x265>
mulsd  %xmm2,%xmm2
mulsd  0xe37(%rip),%xmm2
movsd  %xmm2,0x8(%rsp)
movsd  0xe19(%rip),%xmm2
mov    $0x2,%ebx
movsd  %xmm2,0x10(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    $0x20,%ebx
je     13b5 <Jinc+0x265>
lea    -0x1(%rbx),%eax
imul   %ebx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  0x10(%rsp),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm0,%xmm2
movsd  %xmm2,(%rsp)
movsd  %xmm0,0x10(%rsp)
call   1030 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm0
call   1030 <fabs@plt>
movsd  (%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xdaf(%rip),%xmm0
add    $0x1,%ebx
ucomisd 0x18(%rsp),%xmm0
jbe    1210 <Jinc+0xc0>
jmp    13b5 <Jinc+0x265>
call   1070 <sqrt@plt>
movsd  (%rsp),%xmm2
movsd  %xmm0,0x8(%rsp)
xor    %eax,%eax
ucomisd 0xd95(%rip),%xmm2
setb   %al
ucomisd 0xd92(%rip),%xmm2
movsd  0xd92(%rip),%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm0,0x10(%rsp)
lea    0xa(%rax,%rax,1),%rax
mov    $0x8,%r14d
cmovb  %rax,%r14
shl    $0x3,%r14
movsd  0xd35(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
mov    $0xfffffffd,%r15d
xor    %ebx,%ebx
lea    0xd70(%rip),%r12
lea    0xdd9(%rip),%r13
nopw   0x0(%rax,%rax,1)
lea    0x1(%r15),%edi
movapd %xmm2,%xmm0
call   1060 <pow@plt>
mulsd  (%rbx,%r12,1),%xmm0
movsd  0x18(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
movsd  (%rsp),%xmm0
mov    %r15d,%edi
call   1060 <pow@plt>
movsd  (%rsp),%xmm2
mulsd  (%rbx,%r13,1),%xmm0
movsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
add    $0xfffffffe,%r15d
add    $0x8,%rbx
cmp    %rbx,%r14
jne    1300 <Jinc+0x1b0>
movsd  0xcf0(%rip),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
movapd %xmm1,%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <sin@plt>
mulsd  0x10(%rsp),%xmm0
movsd  0x18(%rsp),%xmm2
mulsd  0x28(%rsp),%xmm2
subsd  %xmm0,%xmm2
mulsd  0x8(%rsp),%xmm2
divsd  (%rsp),%xmm2
movapd %xmm2,%xmm0
add    $0x30,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@Jinc.a1 = internal constant [14 x double] [double 0x3FBE000000000000, double 0xBFC2750000000000, double 0x3FE5A6A580000000, double 0xC01B8920D2680000, double 0x405E6643DC4A1102, double 0xC0A9CC8B6A2EA448, double 0x40FF29945CC23C35, double 0xC159645BEE011BE7, double 0x41BAD6B4C84E170E, double 0xC221DA5076CEDB16, double 0x428D30A1B77EE996, double 0xC2FCC418ACCD750B, double 0x4370D088BA5DA244, double 0xC3E701C3F7BD61CD]
@Jinc.b1 = internal constant [14 x double] [double 0xBFBA400000000000, double 0x3FD1C3D000000000, double 0xBFFFE58188000000, double 0x403B3FB3258C3FFF, double 0xC082DEC0AB499CBC, double 0x40D341980EF2329F, double 0xC12B2B73C0DFBFB1, double 0x4189526F70E0A2A5, double 0xC1EE2097FCA372B9, double 0x425646B0F8D0F712, double 0xC2C409D1CC506D64, double 0x43358C2B1F8519AB, double 0xC3AB4B650E855364, double 0x44241CC8E64BD500]
define double @Jinc(double %0) {
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca i32
%8 = alloca i32
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca i32
store double %0, double* %3
%14 = load double, double* %3
%15 = fmul double %14, 0x401921FB54442D18
store double %15, double* %3
%16 = load double, double* %3
%17 = fcmp olt double %16, 1.000000e-09
br i1 %17, label %18, label %24
18: ; preds = %1
%19 = load double, double* %3
%20 = load double, double* %3
%21 = fmul double %19, %20
%22 = fdiv double %21, 8.000000e+00
%23 = fsub double 1.000000e+00, %22
store double %23, double* %2
br label %130
24: ; preds = %1
%25 = load double, double* %3
%26 = fcmp ole double %25, 0.000000e+00
br i1 %26, label %27, label %28
27: ; preds = %24
store double 1.000000e+00, double* %2
br label %130
28: ; preds = %24
%29 = load double, double* %3
%30 = fcmp ole double %29, 1.200000e+01
br i1 %30, label %31, label %67
31: ; preds = %28
%32 = load double, double* %3
%33 = load double, double* %3
%34 = fmul double %32, %33
store double %34, double* %4
store double 1.000000e+00, double* %5
store double 1.000000e+00, double* %6
store i32 1, i32* %7
br label %35
35: ; preds = %62, %31
%36 = load i32, i32* %7
%37 = icmp sle i32 %36, 30
br i1 %37, label %38, label %65
38: ; preds = %35
%39 = load double, double* %4
%40 = fmul double -2.500000e-01, %39
%41 = load i32, i32* %7
%42 = load i32, i32* %7
%43 = add nsw i32 %42, 1
%44 = mul nsw i32 %41, %43
%45 = sitofp i32 %44 to double
%46 = fdiv double %40, %45
%47 = load double, double* %6
%48 = fmul double %47, %46
store double %48, double* %6
%49 = load double, double* %6
%50 = load double, double* %5
%51 = fadd double %50, %49
store double %51, double* %5
%52 = load double, double* %6
%53 = call i32 @fabs(double %52)
%54 = sitofp i32 %53 to double
%55 = load double, double* %5
%56 = call i32 @fabs(double %55)
%57 = sitofp i32 %56 to double
%58 = fmul double %57, 1.000000e-15
%59 = fcmp olt double %54, %58
br i1 %59, label %60, label %61
60: ; preds = %38
br label %65
61: ; preds = %38
br label %62
62: ; preds = %61
%63 = load i32, i32* %7
%64 = add nsw i32 %63, 1
store i32 %64, i32* %7
br label %35
65: ; preds = %60, %35
%66 = load double, double* %5
store double %66, double* %2
br label %130
67: ; preds = %28
%68 = load double, double* %3
%69 = fcmp oge double %68, 5.000000e+01
br i1 %69, label %70, label %71
70: ; preds = %67
store i32 8, i32* %8
br label %77
71: ; preds = %67
%72 = load double, double* %3
%73 = fcmp oge double %72, 3.500000e+01
br i1 %73, label %74, label %75
74: ; preds = %71
store i32 10, i32* %8
br label %76
75: ; preds = %71
store i32 12, i32* %8
br label %76
76: ; preds = %75, %74
br label %77
77: ; preds = %76, %70
%78 = load double, double* %3
%79 = fdiv double 0x3FE45F306DC9C883, %78
%80 = call double @sqrt(double %79)
store double %80, double* %9
%81 = load double, double* %3
%82 = fsub double %81, 0x4002D97C7F3321D2
store double %82, double* %10
store double 1.000000e+00, double* %11
%83 = load double, double* %3
%84 = fdiv double 3.750000e-01, %83
store double %84, double* %12
store i32 0, i32* %13
br label %85
85: ; preds = %112, %77
%86 = load i32, i32* %13
%87 = load i32, i32* %8
%88 = icmp slt i32 %86, %87
br i1 %88, label %89, label %115
89: ; preds = %85
%90 = load i32, i32* %13
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [14 x double], [14 x double]* @Jinc.a1, i64 0, i64 %91
%93 = load double, double* %92
%94 = load double, double* %3
%95 = load i32, i32* %13
%96 = mul nsw i32 -2, %95
%97 = sub nsw i32 %96, 2
%98 = call double @pow(double %94, i32 %97)
%99 = load double, double* %11
%100 = call double @llvm.fmuladd.f64(double %93, double %98, double %99)
store double %100, double* %11
%101 = load i32, i32* %13
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [14 x double], [14 x double]* @Jinc.b1, i64 0, i64 %102
%104 = load double, double* %103
%105 = load double, double* %3
%106 = load i32, i32* %13
%107 = mul nsw i32 -2, %106
%108 = sub nsw i32 %107, 3
%109 = call double @pow(double %105, i32 %108)
%110 = load double, double* %12
%111 = call double @llvm.fmuladd.f64(double %104, double %109, double %110)
store double %111, double* %12
br label %112
112: ; preds = %89
%113 = load i32, i32* %13
%114 = add nsw i32 %113, 1
store i32 %114, i32* %13
br label %85
115: ; preds = %85
%116 = load double, double* %9
%117 = fmul double 2.000000e+00, %116
%118 = load double, double* %11
%119 = load double, double* %10
%120 = call double @cos(double %119)
%121 = load double, double* %12
%122 = load double, double* %10
%123 = call double @sin(double %122)
%124 = fmul double %121, %123
%125 = fneg double %124
%126 = call double @llvm.fmuladd.f64(double %118, double %120, double %125)
%127 = fmul double %117, %126
%128 = load double, double* %3
%129 = fdiv double %127, %128
store double %129, double* %2
br label %130
130: ; preds = %115, %65, %27, %18
%131 = load double, double* %2
ret double %131
}

LLVM IR (-O2):
@Jinc.a1 = internal unnamed_addr constant [14 x double] [double 0x3FBE000000000000, double 0xBFC2750000000000, double 0x3FE5A6A580000000, double 0xC01B8920D2680000, double 0x405E6643DC4A1102, double 0xC0A9CC8B6A2EA448, double 0x40FF29945CC23C35, double 0xC159645BEE011BE7, double 0x41BAD6B4C84E170E, double 0xC221DA5076CEDB16, double 0x428D30A1B77EE996, double 0xC2FCC418ACCD750B, double 0x4370D088BA5DA244, double 0xC3E701C3F7BD61CD]
@Jinc.b1 = internal unnamed_addr constant [14 x double] [double 0xBFBA400000000000, double 0x3FD1C3D000000000, double 0xBFFFE58188000000, double 0x403B3FB3258C3FFF, double 0xC082DEC0AB499CBC, double 0x40D341980EF2329F, double 0xC12B2B73C0DFBFB1, double 0x4189526F70E0A2A5, double 0xC1EE2097FCA372B9, double 0x425646B0F8D0F712, double 0xC2C409D1CC506D64, double 0x43358C2B1F8519AB, double 0xC3AB4B650E855364, double 0x44241CC8E64BD500]
define double @Jinc(double %0) {
%2 = fmul double %0, 0x401921FB54442D18
%3 = fcmp olt double %2, 1.000000e-09
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = fmul double %2, %2
%6 = fmul double %5, 1.250000e-01
%7 = fsub double 1.000000e+00, %6
br label %70
8: ; preds = %1
%9 = fcmp ugt double %2, 0.000000e+00
br i1 %9, label %10, label %70
10: ; preds = %8
%11 = fcmp ugt double %2, 1.200000e+01
br i1 %11, label %33, label %12
12: ; preds = %10
%13 = fmul double %2, %2
%14 = fmul double %13, -2.500000e-01
br label %15
15: ; preds = %20, %12
%16 = phi double [ 1.000000e+00, %12 ], [ %26, %20 ]
%17 = phi double [ 1.000000e+00, %12 ], [ %25, %20 ]
%18 = phi i32 [ 1, %12 ], [ %21, %20 ]
%19 = icmp eq i32 %18, 31
br i1 %19, label %70, label %20
20: ; preds = %15
%21 = add nuw nsw i32 %18, 1
%22 = mul nuw nsw i32 %21, %18
%23 = sitofp i32 %22 to double
%24 = fdiv double %14, %23
%25 = fmul double %17, %24
%26 = fadd double %16, %25
%27 = tail call i32 @fabs(double %25)
%28 = sitofp i32 %27 to double
%29 = tail call i32 @fabs(double %26)
%30 = sitofp i32 %29 to double
%31 = fmul double %30, 1.000000e-15
%32 = fcmp ogt double %31, %28
br i1 %32, label %70, label %15
33: ; preds = %10
%34 = fcmp ult double %2, 5.000000e+01
%35 = fcmp ult double %2, 3.500000e+01
%36 = fdiv double 0x3FE45F306DC9C883, %2
%37 = tail call double @sqrt(double %36)
%38 = fdiv double 3.750000e-01, %2
%39 = select i1 %35, i64 12, i64 10
%40 = select i1 %34, i64 %39, i64 8
br label %41
41: ; preds = %33, %41
%42 = phi i64 [ 0, %33 ], [ %58, %41 ]
%43 = phi double [ %38, %33 ], [ %57, %41 ]
%44 = phi double [ 1.000000e+00, %33 ], [ %51, %41 ]
%45 = getelementptr inbounds [14 x double], [14 x double]* @Jinc.a1, i64 0, i64 %42
%46 = load double, double* %45
%47 = mul nsw i64 %42, -2
%48 = trunc i64 %47 to i32
%49 = add i32 %48, -2
%50 = tail call double @pow(double %2, i32 %49)
%51 = tail call double @llvm.fmuladd.f64(double %46, double %50, double %44)
%52 = getelementptr inbounds [14 x double], [14 x double]* @Jinc.b1, i64 0, i64 %42
%53 = load double, double* %52
%54 = trunc i64 %47 to i32
%55 = add i32 %54, -3
%56 = tail call double @pow(double %2, i32 %55)
%57 = tail call double @llvm.fmuladd.f64(double %53, double %56, double %43)
%58 = add nuw nsw i64 %42, 1
%59 = icmp eq i64 %58, %40
br i1 %59, label %60, label %41
60: ; preds = %41
%61 = fadd double %2, 0xC002D97C7F3321D2
%62 = fmul double %37, 2.000000e+00
%63 = tail call double @cos(double %61)
%64 = tail call double @sin(double %61)
%65 = fneg double %57
%66 = fmul double %64, %65
%67 = tail call double @llvm.fmuladd.f64(double %51, double %63, double %66)
%68 = fmul double %62, %67
%69 = fdiv double %68, %2
br label %70
70: ; preds = %15, %20, %8, %60, %4
%71 = phi double [ %7, %4 ], [ %69, %60 ], [ 1.000000e+00, %8 ], [ %16, %15 ], [ %26, %20 ]
ret double %71
}