diff options
author | Tamar Christina <tamar.christina@arm.com> | 2025-08-19 10:15:54 +0100 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2025-08-19 10:15:54 +0100 |
commit | 4982644625dc5a46e959ecf8167641f6ae21f76d (patch) | |
tree | 31e92f1abb692a5bd8df329f3a018a6b12fe705e | |
parent | 8c2b3377a28b55279cabf586547cf25c0734d563 (diff) | |
download | gcc-4982644625dc5a46e959ecf8167641f6ae21f76d.zip gcc-4982644625dc5a46e959ecf8167641f6ae21f76d.tar.gz gcc-4982644625dc5a46e959ecf8167641f6ae21f76d.tar.bz2 |
AArch64: Fix scalar costing after removal of vectype from mid-end [PR121536]
commit g:fb59c5719c17a04ecfd58b5e566eccd6d2ac583a stops passing the scalar type
(confusingly named vectype) to the costing hook when doing scalar costing.
As a result, we could no longer distinguish between FPR and GPR scalar stmts.
A later commit also removed STMT_VINFO_VECTYPE from stmt_info.
This leaves the only remaining option to get the type of the original stmt in
the stmt_info. This patch does this when we're performing scalar costing.
Ideally I'd refactor this a bit because a lot of the hooks just need to know if
it's FP or not, but this seems pointless with the ongoing costing churn. So for
now this restores our costing.
gcc/ChangeLog:
PR target/121536
* config/aarch64/aarch64.cc (aarch64_vector_costs::add_stmt_cost): Set
vectype from type of lhs of gimple stmt.
-rw-r--r-- | gcc/config/aarch64/aarch64.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index f88b7c9..83cd132 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -18045,6 +18045,17 @@ aarch64_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, tree vectype, int misalign, vect_cost_model_location where) { + /* When costing for scalars, vectype will be NULL; so look up the type via + stmt_info's statement. */ + if (m_costing_for_scalar && stmt_info) + { + gcc_assert (!vectype); + /* This won't work for e.g. gconds or other statements without a lhs, + but those only work on GPR anyway and this is the best we can do. */ + if (tree lhs = gimple_get_lhs (STMT_VINFO_STMT (stmt_info))) + vectype = TREE_TYPE (lhs); + } + fractional_cost stmt_cost = aarch64_builtin_vectorization_cost (kind, vectype, misalign); |