Recompute TYPE_MODE and DECL_MODE for vector_type for accelerator.
gcc/ChangeLog: PR ipa/96265 * lto-streamer-in.cc (lto_read_tree_1): Set TYPE_MODE and DECL_MODE for vector_type if offloading is enabled. (lto_input_mode_table): Remove handling of vector modes. * tree-streamer-out.cc (pack_ts_decl_common_value_fields): Stream out VOIDmode for vector_type if offloading is enabled. (pack_ts_decl_common_value_fields): Likewise. Signed-off-by: Prathamesh Kulkarni <prathameshk@nvidia.com>
This commit is contained in:
parent
d022f69257
commit
ae88da5e07
2 changed files with 28 additions and 16 deletions
|
@ -1753,16 +1753,30 @@ lto_read_tree_1 (class lto_input_block *ib, class data_in *data_in, tree expr)
|
|||
with -g1, see for example PR113488. */
|
||||
else if (DECL_P (expr) && DECL_ABSTRACT_ORIGIN (expr) == expr)
|
||||
DECL_ABSTRACT_ORIGIN (expr) = NULL_TREE;
|
||||
}
|
||||
|
||||
#ifdef ACCEL_COMPILER
|
||||
if ((VAR_P (expr)
|
||||
|| TREE_CODE (expr) == PARM_DECL
|
||||
|| TREE_CODE (expr) == FIELD_DECL)
|
||||
&& AGGREGATE_TYPE_P (TREE_TYPE (expr))
|
||||
&& DECL_MODE (expr) == VOIDmode)
|
||||
SET_DECL_MODE (expr, TYPE_MODE (TREE_TYPE (expr)));
|
||||
#endif
|
||||
if ((VAR_P (expr)
|
||||
|| TREE_CODE (expr) == PARM_DECL
|
||||
|| TREE_CODE (expr) == FIELD_DECL)
|
||||
&& DECL_MODE (expr) == VOIDmode)
|
||||
{
|
||||
tree type = TREE_TYPE (expr);
|
||||
if (AGGREGATE_TYPE_P (type))
|
||||
SET_DECL_MODE (expr, TYPE_MODE (type));
|
||||
else if (VECTOR_TYPE_P (type))
|
||||
SET_DECL_MODE (expr, TYPE_MODE_RAW (type));
|
||||
}
|
||||
|
||||
if (VECTOR_TYPE_P (expr) && TYPE_MODE (expr) == VOIDmode)
|
||||
{
|
||||
poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (expr);
|
||||
tree innertype = TREE_TYPE (expr);
|
||||
machine_mode vmode
|
||||
= mode_for_vector (SCALAR_TYPE_MODE (innertype), nunits).else_blk ();
|
||||
SET_TYPE_MODE (expr, vmode);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Read the physical representation of a tree node with tag TAG from
|
||||
|
@ -2106,13 +2120,9 @@ lto_input_mode_table (struct lto_file_decl_data *file_data)
|
|||
case MODE_VECTOR_UFRACT:
|
||||
case MODE_VECTOR_ACCUM:
|
||||
case MODE_VECTOR_UACCUM:
|
||||
/* For unsupported vector modes just use BLKmode,
|
||||
if the scalar mode is supported. */
|
||||
if (table[(int) inner] != VOIDmode)
|
||||
{
|
||||
table[m] = BLKmode;
|
||||
break;
|
||||
}
|
||||
/* Vector modes are recomputed on accel side and shouldn't have
|
||||
been streamed-out from host. */
|
||||
gcc_unreachable ();
|
||||
/* FALLTHRU */
|
||||
default:
|
||||
/* This is only used for offloading-target compilations and
|
||||
|
|
|
@ -194,7 +194,8 @@ pack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
|
|||
&& (VAR_P (expr)
|
||||
|| TREE_CODE (expr) == PARM_DECL
|
||||
|| TREE_CODE (expr) == FIELD_DECL)
|
||||
&& AGGREGATE_TYPE_P (TREE_TYPE (expr)))
|
||||
&& (AGGREGATE_TYPE_P (TREE_TYPE (expr))
|
||||
|| VECTOR_TYPE_P (TREE_TYPE (expr))))
|
||||
bp_pack_machine_mode (bp, VOIDmode);
|
||||
else
|
||||
bp_pack_machine_mode (bp, DECL_MODE (expr));
|
||||
|
@ -332,7 +333,8 @@ pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
|
|||
whose size is 256-bits, which is not representable on accelerator.
|
||||
Instead stream out VOIDmode, and while streaming-in, recompute
|
||||
appropriate TYPE_MODE for accelerator. */
|
||||
if (lto_stream_offload_p && AGGREGATE_TYPE_P (expr))
|
||||
if (lto_stream_offload_p
|
||||
&& (AGGREGATE_TYPE_P (expr) || VECTOR_TYPE_P (expr)))
|
||||
bp_pack_machine_mode (bp, VOIDmode);
|
||||
/* for VECTOR_TYPE, TYPE_MODE reevaluates the mode using target_flags
|
||||
not necessary valid in a global context.
|
||||
|
|
Loading…
Add table
Reference in a new issue