aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2021-10-21 10:24:03 +0200
committerRichard Biener <rguenther@suse.de>2021-10-21 11:21:18 +0200
commit7878981f1d44b4c9bb6c4a3137b37f06c725b73d (patch)
tree77986f7420d31ccd5d245c96c473a2354eb5ce82
parente633f82fb71817f3232688869c1eb59f60eb78ca (diff)
downloadgcc-7878981f1d44b4c9bb6c4a3137b37f06c725b73d.zip
gcc-7878981f1d44b4c9bb6c4a3137b37f06c725b73d.tar.gz
gcc-7878981f1d44b4c9bb6c4a3137b37f06c725b73d.tar.bz2
tree-optimization/102847 - properly cost VMAT_INVARIANT loads
The following adds proper costing of VMAT_INVARIANT loads, avoiding to ask the target about the cost of an unsupported vector load cost which we won't emit anyway. 2021-10-21 Richard Biener <rguenther@suse.de> PR tree-optimization/102847 * tree-vect-stmts.c (vect_model_load_cost): Explicitely handle VMAT_INVARIANT as a splat in the prologue.
-rw-r--r--gcc/tree-vect-stmts.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 9cbc1af..8f52745 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -1191,6 +1191,13 @@ vect_model_load_cost (vec_info *vinfo,
ncopies * assumed_nunits,
scalar_load, stmt_info, 0, vect_body);
}
+ else if (memory_access_type == VMAT_INVARIANT)
+ {
+ /* Invariant loads will ideally be hoisted and splat to a vector. */
+ prologue_cost += record_stmt_cost (cost_vec, 1,
+ scalar_to_vec, stmt_info, 0,
+ vect_prologue);
+ }
else
vect_get_load_cost (vinfo, stmt_info, ncopies,
alignment_support_scheme, misalignment, first_stmt_p,