aboutsummaryrefslogtreecommitdiff
path: root/gcc/doc/generic.texi
diff options
context:
space:
mode:
authorAaron Sawdey <acsawdey@linux.ibm.com>2020-11-04 13:54:25 -0600
committerAaron Sawdey <acsawdey@linux.ibm.com>2020-11-17 11:10:11 -0500
commit6b91b3e9df171970a907638d9b2e0bca1e792975 (patch)
tree4520112150212b2ccc3174df9393bad83169aad6 /gcc/doc/generic.texi
parent8661f4faa875f361cd22a197774c1fa04cd0580b (diff)
downloadgcc-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.texi8
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.