This patch implements lowering and adds runtime support for F08 transformational variants of BESSEL_JN and BESSEL_YN.
The runtime implementation uses the recurrence relations
`J(n-1, x) = (2.0 / x) * n * J(n, x) - J(n+1, x)` `Y(n+1, x) = (2.0 / x) * n * Y(n, x) - Y(n-1, x)`
(see https://dlmf.nist.gov/10.74.iv and https://dlmf.nist.gov/10.6.E1).
The special case for x == 0 in BESSEL_JN(N1, N2, x) and BESSEL_YN(N1, N2, x) are handled in the same runtime function although the check for x == 0 is carried out in FIR. Similarly, the anchor points for the recursion are also calculated in FIR and passed explicitly to the runtime function.
Tests have been added for the new runtime functions and the lowering.
The existing tests for lowering were modified so the tests for the elemental and transformational variants are stylistically more consistent.
Possible alternatives:
- Pass the elemental Bessel function that is used to calculate the anchor points of the recursion to the runtime instead of calculating it in FIR.
- Split the runtime implementation for the x == 0 and x != 0 cases.
Hello @tarunprabhu, is unordered predicate here intentional?