This patch brings in some initial changes for lowering Fortran
intrinsics. Intrinsics are generally lowered to a mix of FIR and
MLIR operations, runtime calls or LLVM intrinsics. This patch
particularly brings in the lowering of the Fortran andi intrinsic
to arith.andi in MLIR.
The significant changes are in ConvertExpr.cpp and IntrinsicCall.cpp.
Intrinsic functions occur as part of expressions. Lowering deals with this
in ConvertExpr.cpp in genval(const Fortran::evaluate::FunctionRef<A> &funcRef).
The code in the above mentioned function kicks of a sequence of calls
that ultimately results in a call to the genIand function in
IntrinsicCall.cpp which creates the MLIR arith.andi operation.
A few tests are also included.
Note: Generally intrinsics like iand can occur in array (elemental)
context, but since that part is not fully supported in lowering, tests
are only added for the scalar context.
This patch,
-> was originally written by Jean Perier <jperier@nvidia.com>, Eric Schweitz <eschweitz@nvidia.com> et.al
-> is part of upstreaming from the fir-dev branch of https://github.com/flang-compiler/f18-llvm-project