diff mbox

, Simplify setup of complex types

Message ID 20160621134817.GA18335@ibm-tiger.the-meissners.org
State New
Headers show

Commit Message

Michael Meissner June 21, 2016, 1:48 p.m. UTC
When I submitted the back port to allow complex __float128 to be created on the
PowerPC to the GCC 6.2 branch, Richard Biener suggested a simpler way to set
the complex type:
https://gcc.gnu.org/ml/gcc-patches/2016-06/msg01114.html

This patch implements this change for the trunk.  I have a companion patch for
6.2 once this goes into the trunk.

I bootstrapped the compiler and did a make check with no regressions on a big
endian Power 7 system and a little endian Power 8 system.  Is it ok to go into
the trunk?

[gcc]
2016-06-21  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* stor-layout.c (layout_type): Move setting complex MODE to
	layout_type, instead of setting it ahead of time by the caller.
	* tree.c (build_complex_type): Likewise.

[gcc/fortran]
2016-06-21  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* trans-types.c (gfc_build_complex_type): Move setting complex
	MODE to layout_type, instead of setting it ahead of time by the
	caller.

Comments

Jeff Law June 21, 2016, 8:02 p.m. UTC | #1
On 06/21/2016 07:48 AM, Michael Meissner wrote:
> When I submitted the back port to allow complex __float128 to be created on the
> PowerPC to the GCC 6.2 branch, Richard Biener suggested a simpler way to set
> the complex type:
> https://gcc.gnu.org/ml/gcc-patches/2016-06/msg01114.html
>
> This patch implements this change for the trunk.  I have a companion patch for
> 6.2 once this goes into the trunk.
>
> I bootstrapped the compiler and did a make check with no regressions on a big
> endian Power 7 system and a little endian Power 8 system.  Is it ok to go into
> the trunk?
>
> [gcc]
> 2016-06-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
>
> 	* stor-layout.c (layout_type): Move setting complex MODE to
> 	layout_type, instead of setting it ahead of time by the caller.
> 	* tree.c (build_complex_type): Likewise.
>
> [gcc/fortran]
> 2016-06-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
>
> 	* trans-types.c (gfc_build_complex_type): Move setting complex
> 	MODE to layout_type, instead of setting it ahead of time by the
> 	caller.
OK.

Jeff

ps.  Thanks for the pointer back to the prior discussion with Richi -- 
that makes it a lot easier to pick up state on this while Richi is on PTO.
diff mbox

Patch

Index: gcc/stor-layout.c
===================================================================
--- gcc/stor-layout.c	(revision 237612)
+++ gcc/stor-layout.c	(working copy)
@@ -2146,12 +2146,8 @@  layout_type (tree type)
 
     case COMPLEX_TYPE:
       TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
-
-      /* build_complex_type and fortran's gfc_build_complex_type have set the
-	 expected mode to allow having multiple complex types for multiple
-	 floating point types that have the same size such as the PowerPC with
-	 __ibm128 and __float128.  */
-      gcc_assert (TYPE_MODE (type) != VOIDmode);
+      SET_TYPE_MODE (type,
+		     GET_MODE_COMPLEX_MODE (TYPE_MODE (TREE_TYPE (type))));
 
       TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
       TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
Index: gcc/tree.c
===================================================================
--- gcc/tree.c	(revision 237612)
+++ gcc/tree.c	(working copy)
@@ -8783,7 +8783,6 @@  build_complex_type (tree component_type)
   t = make_node (COMPLEX_TYPE);
 
   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
-  SET_TYPE_MODE (t, GET_MODE_COMPLEX_MODE (TYPE_MODE (component_type)));
 
   /* If we already have such a type, use the old one.  */
   hstate.add_object (TYPE_HASH (component_type));
Index: gcc/fortran/trans-types.c
===================================================================
--- gcc/fortran/trans-types.c	(revision 237613)
+++ gcc/fortran/trans-types.c	(working copy)
@@ -828,7 +828,6 @@  gfc_build_complex_type (tree scalar_type
 
   new_type = make_node (COMPLEX_TYPE);
   TREE_TYPE (new_type) = scalar_type;
-  SET_TYPE_MODE (new_type, GET_MODE_COMPLEX_MODE (TYPE_MODE (scalar_type)));
   layout_type (new_type);
   return new_type;
 }