https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96265

--- Comment #14 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
commit r15-3093-g792adb8d222d0d1d16b182871e105f47823b8e72
Author: Prathamesh Kulkarni <prathame...@nvidia.com>
Date:   Thu Aug 22 19:25:20 2024 +0530

    Recompute TYPE_MODE and DECL_MODE for aggregate type for acclerator.

    The patch streams out VOIDmode for aggregate types with offloading enabled,
    and recomputes appropriate TYPE_MODE and DECL_MODE while streaming-in on
accel
    side. The rationale for this change is to avoid streaming out host-specific
    modes that may be used for aggregate types, which may not be representable
on
    the accelerator. For eg, AArch64 uses OImode for ARRAY_TYPE whose size is
256-bits,
    and nvptx doesn't have OImode, and thus ends up emitting an error from
    lto_input_mode_table.

    gcc/ChangeLog:
            * lto-streamer-in.cc: (lto_read_tree_1): Set DECL_MODE (expr) to
            TREE_TYPE (TYPE_MODE (expr)) if TREE_TYPE (expr) is aggregate type
and
            offloading is enabled.
            * stor-layout.cc (layout_type): Move computation of mode for
            ARRAY_TYPE from ...
            (compute_array_mode): ... to here.
            * stor-layout.h (compute_array_mode): Declare.
            * tree-streamer-in.cc: Include stor-layout.h.
            (unpack_ts_common_value_fields): Call compute_array_mode if
offloading
            is enabled.
            * tree-streamer-out.cc (pack_ts_fixed_cst_value_fields): Stream out
            VOIDmode if decl has aggregate type and offloading is enabled.
            (pack_ts_type_common_value_fields): Stream out VOIDmode for
aggregate
            type if offloading is enabled.

    Signed-off-by: Prathamesh Kulkarni <prathame...@nvidia.com>

Reply via email to