public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jeff Law <jeffreyalaw@gmail.com>
To: Michael Collison <collison@rivosinc.com>, gcc-patches@gcc.gnu.org
Subject: Re: [PATCH v4 05/10] RISC-V:autovec: Add autovectorization patterns for binary integer operations
Date: Tue, 18 Apr 2023 17:14:03 -0600	[thread overview]
Message-ID: <5c100f22-bff0-1534-6790-2bfe8431fa98@gmail.com> (raw)
In-Reply-To: <20230417183701.2249183-6-collison@rivosinc.com>



On 4/17/23 12:36, Michael Collison wrote:
> 2023-03-02  Michael Collison  <collison@rivosinc.com>
> 	    Juzhe Zhong  <juzhe.zhong@rivai.ai>
> 
> 	* config/riscv/riscv.md (riscv_vector_preferred_simd_mode): Include
> 	vector-iterators.md.
> 	* config/riscv/vector-auto.md: New file containing
> 	autovectorization patterns.
> 	* config/riscv/vector-iterators.md (UNSPEC_VADD/UNSPEC_VSUB):
> 	New unspecs for autovectorization patterns.
> 	* config/riscv/vector.md: Remove include of vector-iterators.md
> 	and include vector-auto.md.
So the basic idea here appears to be to have a define_expand with the 
well known names (for the optab interface) generate RTL that is 
subsequently matched by the intrinsics that Juzhe has already defined 
and integrated.

That seems like a reasonable model to start with and get the basic 
functionality in place.  I'm all for focusing on that basic 
functionality first.


> diff --git a/gcc/config/riscv/vector-auto.md b/gcc/config/riscv/vector-auto.md
> new file mode 100644
> index 00000000000..dc62f9af705
> --- /dev/null
> +++ b/gcc/config/riscv/vector-auto.md
So basically vector-auto.md provides the interface to utilize the 
builtins found in vector.md.  Given the size of vector.md I can 
certainly see the desire to separate that out.


> +
> +
> +;; -------------------------------------------------------------------------
> +;; ---- [INT] Addition
Just a note.  This patch actually wires up plus, minus, and, ior, xor, 
ashift, ashiftrt and lshiftrt.  So it's quite a bit more than just 
addition.  So updating the comments is probably warranted.


> +;; -------------------------------------------------------------------------
> +;; Includes:
> +;; - vadd.vv
> +;; - vadd.vx
> +;; - vadd.vi
> +;; -------------------------------------------------------------------------
> +
> +(define_expand "<optab><mode>3"
> +  [(set (match_operand:VI 0 "register_operand")
> +	(any_int_binop:VI (match_operand:VI 1 "register_operand")
> +			  (match_operand:VI 2 "register_operand")))]
> +  "TARGET_VECTOR"
> +{
> +  using namespace riscv_vector;
> +
> +  rtx merge = RVV_VUNDEF (<MODE>mode);
> +  rtx vl = gen_reg_rtx (Pmode);
> +  emit_vlmax_vsetvl (<MODE>mode, vl);
> +  rtx mask_policy = get_mask_policy_no_pred();
> +  rtx tail_policy = get_tail_policy_no_pred();
> +  rtx mask = CONSTM1_RTX(<VM>mode);
> +  rtx vlmax_avl_p = get_avl_type_rtx(NONVLMAX);
> +
> +  emit_insn(gen_pred_<optab><mode>(operands[0], mask, merge, operands[1], operands[2],
> +				vl, tail_policy, mask_policy, vlmax_avl_p));
Just nits.  Make sure to put a space before the open paren of an 
argument list, even when the argument list is empty.  Similarly for the 
other expander in here.  And update the comment.  You may not want to 
list every instruction handled by the expander.  Your call, though 
clearly if you're going to include them, the list ought to be reasonably 
complete.

No objections to this code.  It obviously depends on some bits earlier 
in the patchset which I still need to look at, but I wanted to look at 
this one first as it shows the basic formula for how to wire up the 
basic vector patterns.

Please wait for the prereqs to get reviewed before installing on the trunk.

jeff

  reply	other threads:[~2023-04-18 23:14 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-17 18:36 [PATCH v4 00/10] RISC-V: Add autovec support Michael Collison
2023-04-17 18:36 ` [PATCH v4 01/10] RISC-V: Add new predicates and function prototypes Michael Collison
2023-04-19  0:54   ` Kito Cheng
2023-04-26  2:50     ` Jeff Law
2023-04-17 18:36 ` [PATCH v4 02/10] RISC-V: autovec: Export policy functions to global scope Michael Collison
2023-04-17 18:36 ` [PATCH v4 03/10] RISC-V:autovec: Add auto-vectorization support functions Michael Collison
2023-04-19  1:15   ` Kito Cheng
2023-04-20  2:19   ` juzhe.zhong
2023-04-17 18:36 ` [PATCH v4 04/10] RISC-V:autovec: Add target vectorization hooks Michael Collison
2023-04-19  1:04   ` Kito Cheng
2023-04-20  2:11   ` juzhe.zhong
2023-04-17 18:36 ` [PATCH v4 05/10] RISC-V:autovec: Add autovectorization patterns for binary integer operations Michael Collison
2023-04-18 23:14   ` Jeff Law [this message]
2023-04-19  1:19   ` Kito Cheng
2023-04-20 20:21     ` Michael Collison
2023-04-20  2:24   ` juzhe.zhong
2023-04-26 18:15     ` Robin Dapp
     [not found]     ` <3DF5ADD87A33EE11+BA2E4625-72A4-421A-B9D3-6DCA48E402BD@rivai.ai>
2023-04-27  0:04       ` [PATCH v4 05/10] RISC-V: autovec: " Michael Collison
2023-04-27 16:20         ` Palmer Dabbelt
2023-04-17 18:36 ` [PATCH v4 06/10] RISC-V:autovec: Add autovectorization tests for add & sub Michael Collison
2023-04-17 18:36 ` [PATCH v4 07/10] vect: Verify that GET_MODE_NUNITS is a multiple of 2 Michael Collison
2023-04-18  6:11   ` Richard Biener
2023-04-18 14:28     ` Kito Cheng
2023-04-18 18:21       ` Kito Cheng
2023-04-18 22:48         ` juzhe.zhong
2023-04-18 23:19           ` Michael Collison
2023-04-20 10:01           ` Richard Sandiford
2023-04-17 18:36 ` [PATCH v4 08/10] RISC-V:autovec: Add autovectorization tests for binary integer Michael Collison
2023-04-17 18:37 ` [PATCH v4 09/10] This patch adds a guard for VNx1 vectors that are present in ports like riscv Michael Collison
2023-04-18 14:26   ` Kito Cheng
2023-04-18 18:10     ` Michael Collison
2023-04-17 18:37 ` [PATCH v4 10/10] This patch supports 8 bit auto-vectorization in riscv Michael Collison
2023-04-17 19:26 ` [PATCH v4 00/10] RISC-V: Add autovec support Palmer Dabbelt
2023-04-18  6:22   ` Richard Biener
2023-04-25 15:26 ` Palmer Dabbelt
2023-04-26  2:52   ` 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=5c100f22-bff0-1534-6790-2bfe8431fa98@gmail.com \
    --to=jeffreyalaw@gmail.com \
    --cc=collison@rivosinc.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).