[flang] Compute type allocation size based on the actual target representation.
authorSlava Zakharin <szakharin@nvidia.com>
Thu, 8 Sep 2022 17:13:45 +0000 (10:13 -0700)
committerSlava Zakharin <szakharin@nvidia.com>
Fri, 9 Sep 2022 15:39:15 +0000 (08:39 -0700)
commit02f3fec391fa9a612573f6ab5b92db3fbf6f14db
tree68b0e381eda997342fa90ef231a15357dab8b828
parent83fcba82cc7e97725de8442631e3eb5bfef8880d
[flang] Compute type allocation size based on the actual target representation.

This change makes sure that we compute the element size and the byte stride
based on the target representation of the element type.

For example, when REAL*10 is mapped to x86_fp80 each element occupies
16 bytes rather than 10 because of the padding.

Note that the size computation method used here actually returns
the distance between two adjacent element of the *same* type in memory
(which is equivalent to llvm::DataLayout::getTypeAllocSize()).
It does not return the number of bytes that may be overwritten
by storing a value of the specified type (e.g. what can be computed
via llvm::DataLayout::getTypeStoreSize(), but not available in
mlir::DataLayout).

Differential Revision: https://reviews.llvm.org/D133508
flang/lib/Optimizer/CodeGen/CodeGen.cpp
flang/test/Fir/alloc.fir
flang/test/Fir/arrexp.fir
flang/test/Fir/box.fir
flang/test/Fir/convert-to-llvm.fir
flang/test/Fir/embox.fir
flang/test/Fir/rebox.fir
flang/test/Lower/forall/character-1.f90