#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 */
float j0f(float);
float j1f(float);
float jnf(int n, float xx) {
  float x, pkm2, pkm1, pk, xk, r, ans, xinv, sign;
  int k;
  x = xx;
  sign = 1.0;
  if (n < 0) {
    n = -n;
    if ((n & 1) != 0)
      sign = -1.0;
  }
  if (n == 0)
    return (sign * j0f(x));
  if (n == 1)
    return (sign * j1f(x));
  if (n == 2)
    return (sign * (2.0 * j1f(x) / x - j0f(x)));
  k = 24;
  pk = 2 * (n + k);
  ans = pk;
  xk = x * x;
  do {
    pk -= 2.0;
    ans = pk - (xk / ans);
  } while (--k > 0);
  pk = 1.0;
  xinv = 1.0 / x;
  pkm1 = ans * xinv;
  k = n - 1;
  r = (float)(2 * k);
  do {
    pkm2 = (pkm1 * r - pk * x) * xinv;
    pk = pkm1;
    pkm1 = pkm2;
    r -= 2.0;
  } while (--k > 0);
  r = pk;
  if (r < 0)
    r = -r;
  ans = pkm1;
  if (ans < 0)
    ans = -ans;
  if (r > ans)
    ans = sign * j1f(x) / pk;
  else
    ans = sign * j0f(x) / pkm1;
  return (ans);
}


x86 assembly (clang, -O0):
<jnf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %edi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xebe(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
cmpl   $0x0,-0x8(%rbp)
jge    117a <jnf+0x5a>
xor    %eax,%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1175 <jnf+0x55>
movss  0xe94(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    117a <jnf+0x5a>
cmpl   $0x0,-0x8(%rbp)
jne    11ae <jnf+0x8e>
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x10(%rbp),%xmm0
call   1040 <j0f@plt>
movaps %xmm0,%xmm1
movss  -0x38(%rbp),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1468 <jnf+0x348>
cmpl   $0x1,-0x8(%rbp)
jne    11e2 <jnf+0xc2>
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x10(%rbp),%xmm0
call   1030 <j1f@plt>
movaps %xmm0,%xmm1
movss  -0x3c(%rbp),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1468 <jnf+0x348>
cmpl   $0x2,-0x8(%rbp)
jne    1257 <jnf+0x137>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movss  -0x10(%rbp),%xmm0
call   1030 <j1f@plt>
cvtss2sd %xmm0,%xmm1
movsd  0xdf8(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movss  -0x10(%rbp),%xmm0
call   1040 <j0f@plt>
movsd  -0x50(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x48(%rbp),%xmm0
cvtss2sd %xmm2,%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1468 <jnf+0x348>
movl   $0x18,-0x34(%rbp)
mov    -0x8(%rbp),%eax
add    -0x34(%rbp),%eax
shl    $0x1,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x10(%rbp),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd6e(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x1c(%rbp),%xmm0
movss  -0x20(%rbp),%xmm1
divss  -0x28(%rbp),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
cmp    $0x0,%eax
jg     1289 <jnf+0x169>
movss  0xd27(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd21(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x28(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x18(%rbp),%xmm0
movss  -0x24(%rbp),%xmm2
movss  -0x1c(%rbp),%xmm1
mulss  -0x10(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc8d(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
cmp    $0x0,%eax
jg     1323 <jnf+0x203>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    13c8 <jnf+0x2a8>
movss  -0x24(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x28(%rbp),%xmm0
jbe    13f6 <jnf+0x2d6>
movss  -0x28(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x24(%rbp),%xmm0
ucomiss -0x28(%rbp),%xmm0
jbe    1434 <jnf+0x314>
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x10(%rbp),%xmm0
call   1030 <j1f@plt>
movaps %xmm0,%xmm1
movss  -0x54(%rbp),%xmm0
mulss  %xmm1,%xmm0
divss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    145e <jnf+0x33e>
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x10(%rbp),%xmm0
call   1040 <j0f@plt>
movaps %xmm0,%xmm1
movss  -0x58(%rbp),%xmm0
mulss  %xmm1,%xmm0
divss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<jnf>:
sub    $0x28,%rsp
mov    %edi,%edx
neg    %edx
mov    %edx,%eax
cmovs  %edi,%eax
xor    %ecx,%ecx
test   $0x1,%dl
sete   %dl
test   %edi,%edi
js     1172 <jnf+0x52>
movss  0xec7(%rip),%xmm1
cmp    $0x2,%eax
je     1185 <jnf+0x65>
cmp    $0x1,%eax
movss  %xmm1,(%rsp)
je     11dc <jnf+0xbc>
test   %eax,%eax
jne    11f9 <jnf+0xd9>
call   1040 <j0f@plt>
movss  (%rsp),%xmm1
mulss  %xmm0,%xmm1
movaps %xmm1,%xmm0
add    $0x28,%rsp
ret
mov    %dl,%cl
lea    0xe85(%rip),%rdx
movss  (%rdx,%rcx,4),%xmm1
cmp    $0x2,%eax
jne    1146 <jnf+0x26>
cvtss2sd %xmm1,%xmm1
movsd  %xmm1,(%rsp)
movss  %xmm0,0xc(%rsp)
call   1030 <j1f@plt>
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
addsd  %xmm1,%xmm1
movss  0xc(%rsp),%xmm0
cvtss2sd %xmm0,%xmm2
divsd  %xmm2,%xmm1
movsd  %xmm1,0x10(%rsp)
call   1040 <j0f@plt>
cvtss2sd %xmm0,%xmm0
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  (%rsp),%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
add    $0x28,%rsp
ret
call   1030 <j1f@plt>
movss  (%rsp),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%rsp)
movss  (%rsp),%xmm0
add    $0x28,%rsp
ret
lea    (%rax,%rax,1),%ecx
add    $0x30,%ecx
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
movaps %xmm0,%xmm2
mulss  %xmm0,%xmm2
mov    $0x18,%ecx
movss  0xdf2(%rip),%xmm5
movaps %xmm1,%xmm6
nopl   (%rax)
addss  %xmm5,%xmm1
movaps %xmm2,%xmm3
divss  %xmm6,%xmm3
movaps %xmm1,%xmm4
subss  %xmm3,%xmm4
addss  %xmm5,%xmm1
movaps %xmm2,%xmm3
divss  %xmm4,%xmm3
movaps %xmm1,%xmm4
subss  %xmm3,%xmm4
addss  %xmm5,%xmm1
movaps %xmm2,%xmm3
divss  %xmm4,%xmm3
movaps %xmm1,%xmm6
subss  %xmm3,%xmm6
lea    -0x3(%rcx),%edx
and    $0xfffffffe,%ecx
cmp    $0x2,%ecx
mov    %edx,%ecx
jne    1220 <jnf+0x100>
movss  0xd9d(%rip),%xmm4
movaps %xmm4,%xmm1
divss  %xmm0,%xmm1
lea    (%rax,%rax,1),%ecx
add    $0xfffffffe,%ecx
xorps  %xmm2,%xmm2
cvtsi2ss %ecx,%xmm2
mulss  %xmm1,%xmm6
lea    -0x1(%rax),%ecx
test   %ecx,%ecx
mov    $0x1,%edx
cmovle %ecx,%edx
mov    %eax,%esi
sub    %edx,%esi
movaps %xmm6,%xmm3
test   $0x1,%sil
jne    12a4 <jnf+0x184>
cmp    $0x3,%eax
jge    12c6 <jnf+0x1a6>
jmp    130c <jnf+0x1ec>
mulss  %xmm2,%xmm3
subss  %xmm0,%xmm3
mulss  %xmm1,%xmm3
addss  0xd54(%rip),%xmm2
lea    -0x2(%rax),%ecx
movaps %xmm6,%xmm4
movaps %xmm3,%xmm7
cmp    $0x3,%eax
jl     130c <jnf+0x1ec>
add    $0x2,%ecx
nopl   0x0(%rax)
mulss  %xmm0,%xmm4
movaps %xmm3,%xmm6
mulss  %xmm2,%xmm6
subss  %xmm4,%xmm6
mulss  %xmm1,%xmm6
addss  %xmm5,%xmm2
mulss  %xmm0,%xmm3
movaps %xmm6,%xmm7
mulss  %xmm2,%xmm7
subss  %xmm3,%xmm7
mulss  %xmm1,%xmm7
addss  %xmm5,%xmm2
add    $0xfffffffe,%ecx
movaps %xmm7,%xmm3
movaps %xmm6,%xmm4
cmp    $0x2,%ecx
jg     12d0 <jnf+0x1b0>
movaps 0xcfd(%rip),%xmm4
movaps %xmm6,%xmm1
xorps  %xmm4,%xmm1
xorps  %xmm2,%xmm2
movaps %xmm6,%xmm3
cmpltss %xmm2,%xmm3
andps  %xmm3,%xmm1
andnps %xmm6,%xmm3
orps   %xmm1,%xmm3
xorps  %xmm7,%xmm4
movaps %xmm7,%xmm1
cmpltss %xmm2,%xmm1
andps  %xmm1,%xmm4
andnps %xmm7,%xmm1
orps   %xmm4,%xmm1
ucomiss %xmm1,%xmm3
jbe    1352 <jnf+0x232>
movaps %xmm6,0x10(%rsp)
call   1030 <j1f@plt>
jmp    135c <jnf+0x23c>
movaps %xmm7,0x10(%rsp)
call   1040 <j0f@plt>
movss  (%rsp),%xmm1
mulss  %xmm0,%xmm1
movaps %xmm1,%xmm0
divss  0x10(%rsp),%xmm0
add    $0x28,%rsp
ret

LLVM IR (-O0):
define float @jnf(i32 %0, float %1) {
%3 = alloca float
%4 = alloca i32
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca i32
store i32 %0, i32* %4
store float %1, float* %5
%16 = load float, float* %5
store float %16, float* %6
store float 1.000000e+00, float* %14
%17 = load i32, i32* %4
%18 = icmp slt i32 %17, 0
br i1 %18, label %19, label %27
19: ; preds = %2
%20 = load i32, i32* %4
%21 = sub nsw i32 0, %20
store i32 %21, i32* %4
%22 = load i32, i32* %4
%23 = and i32 %22, 1
%24 = icmp ne i32 %23, 0
br i1 %24, label %25, label %26
25: ; preds = %19
store float -1.000000e+00, float* %14
br label %26
26: ; preds = %25, %19
br label %27
27: ; preds = %26, %2
%28 = load i32, i32* %4
%29 = icmp eq i32 %28, 0
br i1 %29, label %30, label %35
30: ; preds = %27
%31 = load float, float* %14
%32 = load float, float* %6
%33 = call float @j0f(float %32)
%34 = fmul float %31, %33
store float %34, float* %3
br label %153
35: ; preds = %27
%36 = load i32, i32* %4
%37 = icmp eq i32 %36, 1
br i1 %37, label %38, label %43
38: ; preds = %35
%39 = load float, float* %14
%40 = load float, float* %6
%41 = call float @j1f(float %40)
%42 = fmul float %39, %41
store float %42, float* %3
br label %153
43: ; preds = %35
%44 = load i32, i32* %4
%45 = icmp eq i32 %44, 2
br i1 %45, label %46, label %62
46: ; preds = %43
%47 = load float, float* %14
%48 = fpext float %47 to double
%49 = load float, float* %6
%50 = call float @j1f(float %49)
%51 = fpext float %50 to double
%52 = fmul double 2.000000e+00, %51
%53 = load float, float* %6
%54 = fpext float %53 to double
%55 = fdiv double %52, %54
%56 = load float, float* %6
%57 = call float @j0f(float %56)
%58 = fpext float %57 to double
%59 = fsub double %55, %58
%60 = fmul double %48, %59
%61 = fptrunc double %60 to float
store float %61, float* %3
br label %153
62: ; preds = %43
store i32 24, i32* %15
%63 = load i32, i32* %4
%64 = load i32, i32* %15
%65 = add nsw i32 %63, %64
%66 = mul nsw i32 2, %65
%67 = sitofp i32 %66 to float
store float %67, float* %9
%68 = load float, float* %9
store float %68, float* %12
%69 = load float, float* %6
%70 = load float, float* %6
%71 = fmul float %69, %70
store float %71, float* %10
br label %72
72: ; preds = %82, %62
%73 = load float, float* %9
%74 = fpext float %73 to double
%75 = fsub double %74, 2.000000e+00
%76 = fptrunc double %75 to float
store float %76, float* %9
%77 = load float, float* %9
%78 = load float, float* %10
%79 = load float, float* %12
%80 = fdiv float %78, %79
%81 = fsub float %77, %80
store float %81, float* %12
br label %82
82: ; preds = %72
%83 = load i32, i32* %15
%84 = add nsw i32 %83, -1
store i32 %84, i32* %15
%85 = icmp sgt i32 %84, 0
br i1 %85, label %72, label %86
86: ; preds = %82
store float 1.000000e+00, float* %9
%87 = load float, float* %6
%88 = fpext float %87 to double
%89 = fdiv double 1.000000e+00, %88
%90 = fptrunc double %89 to float
store float %90, float* %13
%91 = load float, float* %12
%92 = load float, float* %13
%93 = fmul float %91, %92
store float %93, float* %8
%94 = load i32, i32* %4
%95 = sub nsw i32 %94, 1
store i32 %95, i32* %15
%96 = load i32, i32* %15
%97 = mul nsw i32 2, %96
%98 = sitofp i32 %97 to float
store float %98, float* %11
br label %99
99: ; preds = %115, %86
%100 = load float, float* %8
%101 = load float, float* %11
%102 = load float, float* %9
%103 = load float, float* %6
%104 = fmul float %102, %103
%105 = fneg float %104
%106 = call float @llvm.fmuladd.f32(float %100, float %101, float %105)
%107 = load float, float* %13
%108 = fmul float %106, %107
store float %108, float* %7
%109 = load float, float* %8
store float %109, float* %9
%110 = load float, float* %7
store float %110, float* %8
%111 = load float, float* %11
%112 = fpext float %111 to double
%113 = fsub double %112, 2.000000e+00
%114 = fptrunc double %113 to float
store float %114, float* %11
br label %115
115: ; preds = %99
%116 = load i32, i32* %15
%117 = add nsw i32 %116, -1
store i32 %117, i32* %15
%118 = icmp sgt i32 %117, 0
br i1 %118, label %99, label %119
119: ; preds = %115
%120 = load float, float* %9
store float %120, float* %11
%121 = load float, float* %11
%122 = fcmp olt float %121, 0.000000e+00
br i1 %122, label %123, label %126
123: ; preds = %119
%124 = load float, float* %11
%125 = fneg float %124
store float %125, float* %11
br label %126
126: ; preds = %123, %119
%127 = load float, float* %8
store float %127, float* %12
%128 = load float, float* %12
%129 = fcmp olt float %128, 0.000000e+00
br i1 %129, label %130, label %133
130: ; preds = %126
%131 = load float, float* %12
%132 = fneg float %131
store float %132, float* %12
br label %133
133: ; preds = %130, %126
%134 = load float, float* %11
%135 = load float, float* %12
%136 = fcmp ogt float %134, %135
br i1 %136, label %137, label %144
137: ; preds = %133
%138 = load float, float* %14
%139 = load float, float* %6
%140 = call float @j1f(float %139)
%141 = fmul float %138, %140
%142 = load float, float* %9
%143 = fdiv float %141, %142
store float %143, float* %12
br label %151
144: ; preds = %133
%145 = load float, float* %14
%146 = load float, float* %6
%147 = call float @j0f(float %146)
%148 = fmul float %145, %147
%149 = load float, float* %8
%150 = fdiv float %148, %149
store float %150, float* %12
br label %151
151: ; preds = %144, %137
%152 = load float, float* %12
store float %152, float* %3
br label %153
153: ; preds = %151, %46, %38, %30
%154 = load float, float* %3
ret float %154
}

LLVM IR (-O2):
define float @jnf(i32 %0, float %1) {
%3 = icmp slt i32 %0, 0
%4 = sub nsw i32 0, %0
%5 = and i32 %4, 1
%6 = icmp eq i32 %5, 0
%7 = select i1 %6, float 1.000000e+00, float -1.000000e+00
%8 = select i1 %3, i32 %4, i32 %0
%9 = select i1 %3, float %7, float 1.000000e+00
switch i32 %8, label %28 [
i32 0, label %10
i32 1, label %13
i32 2, label %16
]
10: ; preds = %2
%11 = tail call float @j0f(float %1)
%12 = fmul float %9, %11
br label %107
13: ; preds = %2
%14 = tail call float @j1f(float %1)
%15 = fmul float %9, %14
br label %107
16: ; preds = %2
%17 = fpext float %9 to double
%18 = tail call float @j1f(float %1)
%19 = fpext float %18 to double
%20 = fmul double %19, 2.000000e+00
%21 = fpext float %1 to double
%22 = fdiv double %20, %21
%23 = tail call float @j0f(float %1)
%24 = fpext float %23 to double
%25 = fsub double %22, %24
%26 = fmul double %25, %17
%27 = fptrunc double %26 to float
br label %107
28: ; preds = %2
%29 = shl nuw i32 %8, 1
%30 = add i32 %29, 48
%31 = sitofp i32 %30 to float
%32 = fmul float %1, %1
br label %33
33: ; preds = %33, %28
%34 = phi float [ %31, %28 ], [ %43, %33 ]
%35 = phi float [ %31, %28 ], [ %45, %33 ]
%36 = phi i32 [ 24, %28 ], [ %46, %33 ]
%37 = fadd float %34, -2.000000e+00
%38 = fdiv float %32, %35
%39 = fsub float %37, %38
%40 = fadd float %37, -2.000000e+00
%41 = fdiv float %32, %39
%42 = fsub float %40, %41
%43 = fadd float %40, -2.000000e+00
%44 = fdiv float %32, %42
%45 = fsub float %43, %44
%46 = add nsw i32 %36, -3
%47 = and i32 %36, -2
%48 = icmp eq i32 %47, 2
br i1 %48, label %49, label %33
49: ; preds = %33
%50 = fdiv float 1.000000e+00, %1
%51 = fmul float %50, %45
%52 = add nsw i32 %8, -1
%53 = shl nsw i32 %52, 1
%54 = sitofp i32 %53 to float
%55 = call i32 @llvm.smin.i32(i32 %52, i32 1)
%56 = sub i32 %8, %55
%57 = and i32 %56, 1
%58 = icmp eq i32 %57, 0
br i1 %58, label %65, label %59
59: ; preds = %49
%60 = fneg float %1
%61 = tail call float @llvm.fmuladd.f32(float %51, float %54, float %60)
%62 = fmul float %50, %61
%63 = fadd float %54, -2.000000e+00
%64 = add nsw i32 %8, -2
br label %65
65: ; preds = %59, %49
%66 = phi float [ %51, %49 ], [ %62, %59 ]
%67 = phi float [ 1.000000e+00, %49 ], [ %51, %59 ]
%68 = phi float [ %54, %49 ], [ %63, %59 ]
%69 = phi i32 [ %52, %49 ], [ %64, %59 ]
%70 = phi float [ undef, %49 ], [ %62, %59 ]
%71 = icmp slt i32 %8, 3
br i1 %71, label %89, label %72
72: ; preds = %65, %72
%73 = phi float [ %85, %72 ], [ %66, %65 ]
%74 = phi float [ %80, %72 ], [ %67, %65 ]
%75 = phi float [ %86, %72 ], [ %68, %65 ]
%76 = phi i32 [ %87, %72 ], [ %69, %65 ]
%77 = fneg float %74
%78 = fmul float %77, %1
%79 = tail call float @llvm.fmuladd.f32(float %73, float %75, float %78)
%80 = fmul float %50, %79
%81 = fadd float %75, -2.000000e+00
%82 = fneg float %73
%83 = fmul float %82, %1
%84 = tail call float @llvm.fmuladd.f32(float %80, float %81, float %83)
%85 = fmul float %50, %84
%86 = fadd float %81, -2.000000e+00
%87 = add nsw i32 %76, -2
%88 = icmp sgt i32 %76, 2
br i1 %88, label %72, label %89
89: ; preds = %72, %65
%90 = phi float [ %51, %65 ], [ %80, %72 ]
%91 = phi float [ %70, %65 ], [ %85, %72 ]
%92 = fcmp olt float %90, 0.000000e+00
%93 = fneg float %90
%94 = select i1 %92, float %93, float %90
%95 = fcmp olt float %91, 0.000000e+00
%96 = fneg float %91
%97 = select i1 %95, float %96, float %91
%98 = fcmp ogt float %94, %97
br i1 %98, label %99, label %103
99: ; preds = %89
%100 = tail call float @j1f(float %1)
%101 = fmul float %9, %100
%102 = fdiv float %101, %90
br label %107
103: ; preds = %89
%104 = tail call float @j0f(float %1)
%105 = fmul float %9, %104
%106 = fdiv float %105, %91
br label %107
107: ; preds = %99, %103, %16, %13, %10
%108 = phi float [ %12, %10 ], [ %15, %13 ], [ %27, %16 ], [ %102, %99 ], [ %106, %103 ]
ret float %108
}