rs6000: Fix AIX aggregate passing fix
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 5 Dec 2018 01:04:11 +0000 (02:04 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 5 Dec 2018 01:04:11 +0000 (02:04 +0100)
David's fix for the AIX aggregate passing from yesterday unfortunately
also triggers on powerpc64-linux.  This fixes it.

* config/rs6000/rs6000.c (rs6000_function_arg): Only do the special
aggregate handling on actual AIX, not on somewhat similar systems.
(rs6000_arg_partial_bytes): Ditto.

From-SVN: r266811

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index ce915527e10abd206df7d279b45e93244100f68c..87ce4c6380340a865785442deff8267040697cfa 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-05  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * config/rs6000/rs6000.c (rs6000_function_arg): Only do the special
+       aggregate handling on actual AIX, not on somewhat similar systems.
+       (rs6000_arg_partial_bytes): Ditto.
+
 2018-12-04  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR rtl-optimization/88317
index 4f12558b0a872cbb2b5adea066cc2cc61a42ba37..91e012176e6eeb86c080a5852c99161d5f21d194 100644 (file)
@@ -11990,7 +11990,7 @@ rs6000_function_arg (cumulative_args_t cum_v, machine_mode mode,
        cum->fregno++;
 
       if (USE_FP_FOR_ARG_P (cum, elt_mode)
-         && !(TARGET_AIX && AGGREGATE_TYPE_P (type)))
+         && !(TARGET_AIX && !TARGET_ELF && AGGREGATE_TYPE_P (type)))
        {
          rtx rvec[GP_ARG_NUM_REG + AGGR_ARG_NUM_REG + 1];
          rtx r, off;
@@ -12127,7 +12127,7 @@ rs6000_arg_partial_bytes (cumulative_args_t cum_v, machine_mode mode,
   align_words = rs6000_parm_start (mode, type, cum->words);
 
   if (USE_FP_FOR_ARG_P (cum, elt_mode)
-      && !(TARGET_AIX && AGGREGATE_TYPE_P (type)))
+      && !(TARGET_AIX && !TARGET_ELF && AGGREGATE_TYPE_P (type)))
     {
       unsigned long n_fpreg = (GET_MODE_SIZE (elt_mode) + 7) >> 3;