On 6/13/23 09:55, Andrew Stubbs wrote:
Subject:
[PATCH] vect: Vectorize via libfuncs
From:
Andrew Stubbs <a...@codesourcery.com>
Date:
6/13/23, 09:55

To:
"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>


This patch allows vectorization when operators are available as libfuncs, rather that only as insns.

This will be useful for amdgcn where we plan to vectorize loops that contain integer division or modulus, but don't want to generate inline instructions for the division algorithm every time.

The change should have not affect architectures that do not define vector-mode libfuncs.

OK for mainline?

Andrew

230613-vect-allow-libfuncs.patch

vect: vectorize via libfuncs

This patch allows vectorization when the libfuncs are defined.

gcc/ChangeLog:

        * tree-vect-generic.cc: Include optabs-libfuncs.h.
        (get_compute_type): Check optab_libfunc.
        * tree-vect-stmts.cc: Include optabs-libfuncs.h.
        (vectorizable_operation): Check optab_libfunc.

diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc
index b7d4a919c55..4d784a70c0d 100644
--- a/gcc/tree-vect-generic.cc
+++ b/gcc/tree-vect-generic.cc
@@ -44,6 +44,7 @@ along with GCC; see the file COPYING3.  If not see
  #include "gimple-fold.h"
  #include "gimple-match.h"
  #include "recog.h"          /* FIXME: for insn_data */
+#include "optabs-libfuncs.h"
/* Build a ternary operation and gimplify it. Emit code before GSI.
@@ -1714,7 +1715,8 @@ get_compute_type (enum tree_code code, optab op, tree 
type)
        machine_mode compute_mode = TYPE_MODE (compute_type);
        if (VECTOR_MODE_P (compute_mode))
        {
-         if (op && optab_handler (op, compute_mode) != CODE_FOR_nothing)
+         if (op && (optab_handler (op, compute_mode) != CODE_FOR_nothing
+                    || optab_libfunc (op, compute_mode)))
Formatting nit. Bring the && down and align it under OP. That'll require re-indenting the optab_libfunc call as well.

OK with that nit.

jeff

Reply via email to