On Wed, Jun 15, 2016 at 11:01:05AM +0200, Richard Biener wrote: > And I don't understand the layout_type change either - it looks to me > it could just have used > > SET_TYPE_MODE (type, GET_MODE_COMPLEX_MODE (TYPE_MODE > (TREE_TYPE (type)))); > > and be done with it. To me that looks a lot safer. I made this change in the trunk, and now I would like approval for applying this code which includes the above change in the GCC 6.2 branch. Here is the change for the trunk: https://gcc.gnu.org/ml/gcc-patches/2016-06/msg01489.html I tested it on both a big endian power7 and a little endian power8 systems with no regressions. Is it ok to apply to the GCC 6.2 branch? [gcc] 2016-06-22 Michael Meissner Back port from trunk 2016-06-21 Michael Meissner * stor-layout.c (layout_type): Move setting complex MODE to layout_type, instead of setting it ahead of time by the caller. Back port from trunk 2016-05-11 Alan Modra * config/rs6000/rs6000.c (is_complex_IBM_long_double, abi_v4_pass_in_fpr): New functions. (rs6000_function_arg_boundary): Exclude complex IBM long double from 64-bit alignment when ABI_V4. (rs6000_function_arg, rs6000_function_arg_advance_1, rs6000_gimplify_va_arg): Use abi_v4_pass_in_fpr. Back port from trunk 2016-05-02 Michael Meissner * machmode.h (mode_complex): Add support to give the complex mode for a given mode. (GET_MODE_COMPLEX_MODE): Likewise. * stor-layout.c (layout_type): For COMPLEX_TYPE, use the mode stored by build_complex_type and gfc_build_complex_type instead of trying to figure out the appropriate mode based on the size. Raise an assertion error, if the type was not set. * genmodes.c (struct mode_data): Add field for the complex type of the given type. (blank_mode): Likewise. (make_complex_modes): Remember the complex mode created in the base type. (emit_mode_complex): Write out the mode_complex array to map a type mode to the complex version. (emit_insn_modes_c): Likewise. * tree.c (build_complex_type): Set the complex type to use before calling layout_type. * config/rs6000/rs6000.c (rs6000_hard_regno_nregs_internal): Add support for __float128 complex datatypes. (rs6000_hard_regno_mode_ok): Likewise. (rs6000_setup_reg_addr_masks): Likewise. (rs6000_complex_function_value): Likewise. * config/rs6000/rs6000.h (FLOAT128_IEEE_P): Likewise. __float128 and __ibm128 complex. (FLOAT128_IBM_P): Likewise. (ALTIVEC_ARG_MAX_RETURN): Likewise. * doc/extend.texi (Additional Floating Types): Document that -mfloat128 must be used to enable __float128. Document complex __float128 and __ibm128 support. [gcc/testsuite] 2016-06-22 Michael Meissner Back port from trunk 2016-05-02 Michael Meissner * gcc.target/powerpc/float128-complex-1.c: New tests for complex __float128. * gcc.target/powerpc/float128-complex-2.c: Likewise. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797