diff options
author | Aaron Sawdey <acsawdey@linux.ibm.com> | 2020-11-04 13:54:25 -0600 |
---|---|---|
committer | Aaron Sawdey <acsawdey@linux.ibm.com> | 2020-11-17 11:10:11 -0500 |
commit | 6b91b3e9df171970a907638d9b2e0bca1e792975 (patch) | |
tree | 4520112150212b2ccc3174df9393bad83169aad6 /gcc/doc/generic.texi | |
parent | 8661f4faa875f361cd22a197774c1fa04cd0580b (diff) | |
download | gcc-6b91b3e9df171970a907638d9b2e0bca1e792975.zip gcc-6b91b3e9df171970a907638d9b2e0bca1e792975.tar.gz gcc-6b91b3e9df171970a907638d9b2e0bca1e792975.tar.bz2 |
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.
Diffstat (limited to 'gcc/doc/generic.texi')
-rw-r--r-- | gcc/doc/generic.texi | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/doc/generic.texi b/gcc/doc/generic.texi index 7373266..5c1d3cd 100644 --- a/gcc/doc/generic.texi +++ b/gcc/doc/generic.texi @@ -302,6 +302,7 @@ The elements are indexed from zero. @tindex ARRAY_TYPE @tindex RECORD_TYPE @tindex UNION_TYPE +@tindex OPAQUE_TYPE @tindex UNKNOWN_TYPE @tindex OFFSET_TYPE @findex TYPE_UNQUALIFIED @@ -487,6 +488,13 @@ assigned to that constant. These constants will appear in the order in which they were declared. The @code{TREE_TYPE} of each of these constants will be the type of enumeration type itself. +@item OPAQUE_TYPE +Used for things that have a @code{MODE_OPAQUE} mode class in the +backend. Opaque types have a size and precision, and can be held in +memory or registers. They are used when we do not want the compiler to +make assumptions about the availability of other operations as would +happen with integer types. + @item BOOLEAN_TYPE Used to represent the @code{bool} type. |