diff options
author | Peter Klausler <35819229+klausler@users.noreply.github.com> | 2024-04-22 15:46:00 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-22 15:46:00 -0700 |
commit | 1444e5acfb75630c23b118c39454a05cf3792d35 (patch) | |
tree | a7882b078840eb1ece8c9e71488eb6e9cd0369dc /lldb/source/Plugins/ScriptInterpreter/Python | |
parent | fde5e471df3e946482422c10fa422b09a854c7cb (diff) | |
download | llvm-1444e5acfb75630c23b118c39454a05cf3792d35.zip llvm-1444e5acfb75630c23b118c39454a05cf3792d35.tar.gz llvm-1444e5acfb75630c23b118c39454a05cf3792d35.tar.bz2 |
[flang] Complete implementation of OUT_OF_RANGE() (#89334)
The intrinsic function OUT_OF_RANGE() lacks support in lowering and the
runtime. This patch obviates a need for any such support by implementing
OUT_OF_RANGE() via rewriting in semantics. This rewriting of
OUT_OF_RANGE() calls replaces the existing code that folds
OUT_OF_RANGE() calls with constant arguments.
Some changes and fixes were necessary outside of OUT_OF_RANGE()'s
folding code (now rewriting code), whose testing exposed some other
issues worth fixing.
- The common::RealDetails<> template class was recoded in terms of a new
base class with a constexpr constructor, so that the the characteristics
of the various REAL kinds could be queried dynamically as well. This
affected some client usage.
- There were bugs in the code that folds TRANSFER() when the type of X
or MOLD was REAL(10) -- this is a type that occupies 16 bytes per
element in execution memory but only 10 bytes (was 12) in the data of
std::vector<Scalar<>> in a Constant<>.
- Folds of REAL->REAL conversions weren't preserving infinities.
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python')
0 files changed, 0 insertions, 0 deletions