From: Andrew Stubbs <ams@codesourcery.com>
To: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: [PATCH] vect: Vectorize via libfuncs
Date: Tue, 13 Jun 2023 16:55:57 +0100 [thread overview]
Message-ID: <0e5fddf8-8605-a0d6-eede-1a8fcf12535c@codesourcery.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 413 bytes --]
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
[-- Attachment #2: 230613-vect-allow-libfuncs.patch --]
[-- Type: text/plain, Size: 2031 bytes --]
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)))
return compute_type;
if (code == MULT_HIGHPART_EXPR
&& can_mult_highpart_p (compute_mode,
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index a7acc032d47..71a8cf2c6d4 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -56,6 +56,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-fold.h"
#include "regs.h"
#include "attribs.h"
+#include "optabs-libfuncs.h"
/* For lang_hooks.types.type_for_mode. */
#include "langhooks.h"
@@ -6528,8 +6529,8 @@ vectorizable_operation (vec_info *vinfo,
"no optab.\n");
return false;
}
- target_support_p = (optab_handler (optab, vec_mode)
- != CODE_FOR_nothing);
+ target_support_p = (optab_handler (optab, vec_mode) != CODE_FOR_nothing
+ || optab_libfunc (optab, vec_mode));
}
bool using_emulated_vectors_p = vect_emulated_vector_p (vectype);
next reply other threads:[~2023-06-13 15:56 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-13 15:55 Andrew Stubbs [this message]
2023-06-13 16:28 ` Jeff Law
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0e5fddf8-8605-a0d6-eede-1a8fcf12535c@codesourcery.com \
--to=ams@codesourcery.com \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).