Richard Biener <rguent...@suse.de> writes: > The following happens to improve compile-time of the PR103641 > testcase on aarch64 significantly. I did not investigate the > effect on the generated code but at least in theory > choose_mult_variant should do a better job when we tell it > the actual mode we are going to use for the operations it > synthesizes.
Yeah, agreed. (Following up from a comment in the PR: I don't think we can rely on unsupported operations having a high cost, but then we should already be checking that the operations are actually supported.) > Bootstrapped and tested on x86_64-unknown-linux-gnu. > > OK for trunk? > > Thanks, > Richard. > > 2022-02-04 Richard Biener <rguent...@suse.de> > > PR tree-optimization/103641 > * tree-vect-patterns.cc (vect_synth_mult_by_constant): > Pass the vector mode to choose_mult_variant. > --- > gcc/tree-vect-patterns.cc | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc > index bea04992160..686a10caec1 100644 > --- a/gcc/tree-vect-patterns.cc > +++ b/gcc/tree-vect-patterns.cc > @@ -3046,17 +3046,17 @@ vect_synth_mult_by_constant (vec_info *vinfo, tree > op, tree val, > can synthesize shifts that way. */ > bool synth_shift_p = !vect_supportable_shift (vinfo, LSHIFT_EXPR, > multtype); > > + tree vectype = get_vectype_for_scalar_type (vinfo, multtype); > HOST_WIDE_INT hwval = tree_to_shwi (val); > /* Use MAX_COST here as we don't want to limit the sequence on rtx costs. > The vectorizer's benefit analysis will decide whether it's beneficial > to do this. */ > - bool possible = choose_mult_variant (mode, hwval, &alg, > - &variant, MAX_COST); > + bool possible = choose_mult_variant (VECTOR_MODE_P (TYPE_MODE (vectype)) > + ? TYPE_MODE (vectype) : mode, > + hwval, &alg, &variant, MAX_COST); > if (!possible) > return NULL; > > - tree vectype = get_vectype_for_scalar_type (vinfo, multtype); > - > if (!vectype > || !target_supports_mult_synth_alg (&alg, variant, > vectype, synth_shift_p)) The !vectype early out needs to move with the assignment. LGTM otherwise. Thanks, Richard