Disallow EXTRACT_LAST_REDUCTION for reduction chains
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 10 Dec 2019 11:30:49 +0000 (11:30 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 10 Dec 2019 11:30:49 +0000 (11:30 +0000)
gcc.dg/vect/vect-cond-reduc-5.c was ICEing for SVE because we
tried to use an extract-last reduction for a chain of COND_EXPRs.
Adding support for the chained case would be too invasive for stage 3
so this patch explicitly forbids it instead.  I've filed PR92884 for
the possible future work.

2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-loop.c (vectorizable_reduction): Don't use
EXTRACT_LAST_REDUCTION for chained reductions.

From-SVN: r279161

gcc/ChangeLog
gcc/tree-vect-loop.c

index 21a809532218e445e838db5af507799eca58e4c1..42d141891779b1762a09014f51a98487731203df 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * tree-vect-loop.c (vectorizable_reduction): Don't use
+       EXTRACT_LAST_REDUCTION for chained reductions.
+
 2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>
 
        * ipa-utils.h (get_odr_name_for_type): Check for a TYPE_DECL.
index ddc1d83a4d305270791ef26d1fbf5a041450f2ae..50f1a227d4e9174f66cb970700d5c31965fe3f06 100644 (file)
@@ -6196,8 +6196,9 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
          return false;
        }
 
-      if (direct_internal_fn_supported_p (IFN_FOLD_EXTRACT_LAST,
-                                         vectype_in, OPTIMIZE_FOR_SPEED))
+      if (reduc_chain_length == 1
+         && direct_internal_fn_supported_p (IFN_FOLD_EXTRACT_LAST,
+                                            vectype_in, OPTIMIZE_FOR_SPEED))
        {
          if (dump_enabled_p ())
            dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,