[all-commits] [llvm/llvm-project] 3ccd4c: [flang] Support aint/anint for 80/128 bit in lowering

PeixinQiao via All-commits all-commits at lists.llvm.org
Fri Jul 22 23:46:16 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 3ccd4ce29ca7f59eb12b077705cde2c11ac13aae
      https://github.com/llvm/llvm-project/commit/3ccd4ce29ca7f59eb12b077705cde2c11ac13aae
  Author: Peixin Qiao <qiaopeixin at huawei.com>
  Date:   2022-07-23 (Sat, 23 Jul 2022)

  Changed paths:
    M flang/include/flang/Runtime/numeric.h
    M flang/lib/Lower/IntrinsicCall.cpp
    M flang/runtime/numeric.cpp
    M flang/test/Lower/Intrinsics/aint.f90
    M flang/test/Lower/Intrinsics/anint.f90
    M flang/test/Lower/math-lowering.f90
    M flang/unittests/Runtime/Numeric.cpp

  Log Message:
  -----------
  [flang] Support aint/anint for 80/128 bit in lowering

For aint/anint, LLVM conversion operations llvm.trunc and llvm.round
can support the edge case of aint(-0.) and anint(-0.). The output is -0.
and it is the same of `gfortran` and `classic flang`, while the output
of `ifort` is 0.. The `real(10)/real(16)` is not supported before.
Support it and remove the runtime functions for aint/anint.

For nint, `gfortran`, `ifort`, and LLVM Flang using llvm.lround have
different results when the magnitude of argument is more than the max of
result value range. So delay its support in lowering after more
investigations.

Reviewed By: vzakhari

Differential Revision: https://reviews.llvm.org/D130024




More information about the All-commits mailing list