Add MODE_OPAQUE
authorAaron Sawdey <acsawdey@linux.ibm.com>
Wed, 4 Nov 2020 19:54:25 +0000 (13:54 -0600)
committerAaron Sawdey <acsawdey@linux.ibm.com>
Tue, 17 Nov 2020 16:10:11 +0000 (11:10 -0500)
commit6b91b3e9df171970a907638d9b2e0bca1e792975
tree4520112150212b2ccc3174df9393bad83169aad6
parent8661f4faa875f361cd22a197774c1fa04cd0580b
Add MODE_OPAQUE

After discussion with Richard Sandiford on IRC, he suggested adding a
new mode class MODE_OPAQUE to deal with the problems (PR 96791) we had
been having with POImode/PXImode in powerpc target. This patch is the
accumulation of changes I needed to make to add this and make it useable
for the purposes of what power10 MMA needed.

MODE_OPAQUE modes allow you to have modes for which you can just
define loads and stores. By design, optimization does not expect to
know how to do arithmetic or subregs on these modes. This allows us to
have modes for multi-register vector operations where we don't want to
open Pandora's Box and define general arithmetic operations.

This patch will be followed by a target specific patch to change the
powerpc power10 MMA builtins to use opaque modes, and will also let use
use the vector pair loads/stores defined with that in the inline expansion
of memcpy/memmove, allowing me to fix PR 96791.

gcc/ChangeLog
PR target/96791
* mode-classes.def: Add MODE_OPAQUE.
* machmode.def: Add OPAQUE_MODE.
* tree.def: Add OPAQUE_TYPE for types that will use
MODE_OPAQUE.
* doc/generic.texi: Document OPAQUE_TYPE.
* doc/rtl.texi: Document MODE_OPAQUE.
* machmode.h: Add OPAQUE_MODE_P().
* genmodes.c (complete_mode): Add MODE_OPAQUE.
(opaque_mode): New function.
* tree.c (tree_code_size): Add OPAQUE_TYPE.
* tree.h: Add OPAQUE_TYPE_P().
* stor-layout.c (int_mode_for_mode): Treat MODE_OPAQUE modes
like BLKmode.
* ira.c (find_moveable_pseudos): Treat MODE_OPAQUE modes more
like integer/float modes here.
* dbxout.c (dbxout_type): Treat OPAQUE_TYPE like VOID_TYPE.
* tree-pretty-print.c (dump_generic_node): Treat OPAQUE_TYPE
like like other types.
13 files changed:
gcc/dbxout.c
gcc/doc/generic.texi
gcc/doc/rtl.texi
gcc/genmodes.c
gcc/ira.c
gcc/machmode.def
gcc/machmode.h
gcc/mode-classes.def
gcc/stor-layout.c
gcc/tree-pretty-print.c
gcc/tree.c
gcc/tree.def
gcc/tree.h