tree-optimization/103641 - improve vect_synth_mult_by_constant

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.

2022-02-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/103641
	* tree-vect-patterns.cc (vect_synth_mult_by_constant):
	Pass the vector mode to choose_mult_variant.
This commit is contained in:
Richard Biener 2022-02-04 09:26:57 +01:00
parent 49365d511a
commit 876e70d468

View File

@ -3041,6 +3041,9 @@ vect_synth_mult_by_constant (vec_info *vinfo, tree op, tree val,
bool cast_to_unsigned_p = !TYPE_OVERFLOW_WRAPS (itype);
tree multtype = cast_to_unsigned_p ? unsigned_type_for (itype) : itype;
tree vectype = get_vectype_for_scalar_type (vinfo, multtype);
if (!vectype)
return NULL;
/* Targets that don't support vector shifts but support vector additions
can synthesize shifts that way. */
@ -3050,16 +3053,13 @@ vect_synth_mult_by_constant (vec_info *vinfo, tree op, tree 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))
if (!target_supports_mult_synth_alg (&alg, variant, vectype, synth_shift_p))
return NULL;
tree accumulator;