From 54647e7b7284885e9eb3eda5854942fa8df4f93c Mon Sep 17 00:00:00 2001 From: Segher Boessenkool Date: Tue, 26 Jun 2018 17:16:58 +0200 Subject: [PATCH] rs6000: Set up ieee128_float_type_node correctly (PR82625) We shouldn't init __ieee128 to be the same as long double if the latter is not even a 128-bit type. This also reorders the nearby __ibm128 code so both types use similar logic. PR target/82625 * config/rs6000/rs6000.c (rs6000_init_builtins): Do not set ieee128_float_type_node to long_double_type_node unless TARGET_LONG_DOUBLE_128 is set. From-SVN: r262152 --- gcc/ChangeLog | 7 +++++++ gcc/config/rs6000/rs6000.c | 13 ++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 749a10ff727..741254de299 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-06-26 Segher Boessenkool + + PR target/82625 + * config/rs6000/rs6000.c (rs6000_init_builtins): Do not set + ieee128_float_type_node to long_double_type_node unless + TARGET_LONG_DOUBLE_128 is set. + 2018-06-26 David Malcolm * cfgloop.c (get_loop_location): Convert return type from diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index d6d324b7cee..e61c9cee893 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -16421,21 +16421,24 @@ rs6000_init_builtins (void) __ieee128. */ if (TARGET_FLOAT128_TYPE) { - if (TARGET_IEEEQUAD || !TARGET_LONG_DOUBLE_128) + if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128) + ibm128_float_type_node = long_double_type_node; + else { ibm128_float_type_node = make_node (REAL_TYPE); TYPE_PRECISION (ibm128_float_type_node) = 128; SET_TYPE_MODE (ibm128_float_type_node, IFmode); layout_type (ibm128_float_type_node); } - else - ibm128_float_type_node = long_double_type_node; lang_hooks.types.register_builtin_type (ibm128_float_type_node, "__ibm128"); - ieee128_float_type_node - = TARGET_IEEEQUAD ? long_double_type_node : float128_type_node; + if (TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128) + ieee128_float_type_node = long_double_type_node; + else + ieee128_float_type_node = float128_type_node; + lang_hooks.types.register_builtin_type (ieee128_float_type_node, "__ieee128"); } -- 2.30.2