On Mon, 14 Aug 2023, juzhe.zh...@rivai.ai wrote:

> -                       != CODE_FOR_nothing)
> +                         != CODE_FOR_nothing
> +                       && can_vec_extract_var_idx_p (
> +                         TYPE_MODE (vectype), TYPE_MODE (TREE_TYPE 
> (vectype))))
> 
> I think maybe 'can_vec_extract_var_idx_p' check is enough and remove 
> convert_optab_handler (vec_extract_optab,... check.
> Looking forward Richi's more comments.

Yes, I think can_vec_extract_var_idx_p already does that so no need to
duplicate it here.

Richard.

> Thanks.
> 
> 
> juzhe.zh...@rivai.ai
>  
> From: Kewen.Lin
> Date: 2023-08-14 17:19
> To: Robin Dapp
> CC: gcc-patches; richard.sandiford; rguenther; juzhe.zh...@rivai.ai
> Subject: Re: [PATCH V4] VECT: Support loop len control on EXTRACT_LAST 
> vectorization
> Hi Robin,
>  
> on 2023/8/14 16:58, Robin Dapp wrote:
> > Hi Kewen,
> > 
> >> I did a bootstrapping and regression testing on Power10 (LE) and found a 
> >> lot of failures.
> > 
> > I think the problem is that just like for vec_set we're expecting
> > the vec_extract expander not to fail.  It is probably passed not a
> > const int here anymore and therefore fails to expand?
>  
> Thanks for the comments!  Yeah, I think the expectation doesn't hold
> on Power, as our vec_extract optab only support const index, that
> is:
>  
> (define_expand "vec_extract<mode><VEC_base_l>"
>   [(match_operand:<VEC_base> 0 "register_operand")
>    (match_operand:VEC_E 1 "vlogical_operand")
>    (match_operand 2 "const_int_operand")]
>   "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
> {
>   rs6000_expand_vector_extract (operands[0], operands[1], operands[2]);
>   DONE;
> })
>  
> > 
> > can_vec_extract_var_idx_p is supposed to check if the backend
> > supports extracting a variable index.
>  
> OK, it sounds that this new capability needs to further check with
> function can_vec_extract_var_idx_p to ensure the ifn expanding work
> as expected.  I re-spined by adding the below as your comments:
>  
> diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
> index 07f3717ed9d..80ba5cae84a 100644
> --- a/gcc/tree-vect-loop.cc
> +++ b/gcc/tree-vect-loop.cc
> @@ -10328,7 +10328,9 @@ vectorizable_live_operation (vec_info *vinfo, 
> stmt_vec_info stmt_info,
>                else if (convert_optab_handler (vec_extract_optab,
>                                                TYPE_MODE (vectype),
>                                                TYPE_MODE (TREE_TYPE 
> (vectype)))
> -                       != CODE_FOR_nothing)
> +                         != CODE_FOR_nothing
> +                       && can_vec_extract_var_idx_p (
> +                         TYPE_MODE (vectype), TYPE_MODE (TREE_TYPE 
> (vectype))))
>                  vect_record_loop_len (loop_vinfo,
>                                        &LOOP_VINFO_LENS (loop_vinfo),
>                                        1, vectype, 1);
>  
> BR,
> Kewen
>  
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to