diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-12 17:33:01 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-12 17:33:01 +0000 |
commit | 902b7c9e1835bc11a6127f9bd0c18928bfdbf18d (patch) | |
tree | 8aada874d1cc61f2e85c5bc417a8ddf6c7462fd6 | |
parent | 26122469dff16a15f7f0eaa9bc7757d53b253f8b (diff) | |
download | gcc-902b7c9e1835bc11a6127f9bd0c18928bfdbf18d.zip gcc-902b7c9e1835bc11a6127f9bd0c18928bfdbf18d.tar.gz gcc-902b7c9e1835bc11a6127f9bd0c18928bfdbf18d.tar.bz2 |
aarch64: Get floatness from stmt_info
This patch gets the floatness of a memory access from the data
reference rather than the vectype. This makes it more suitable
for use in scalar costing code.
gcc/
* config/aarch64/aarch64.c (aarch64_dr_type): New function.
(aarch64_vector_costs::count_ops): Use it rather than the
vectype to determine floatness.
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 416362b..d8bbc66 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -14920,6 +14920,16 @@ aarch64_simd_vec_costs_for_flags (unsigned int flags) return costs->advsimd; } +/* If STMT_INFO is a memory reference, return the scalar memory type, + otherwise return null. */ +static tree +aarch64_dr_type (stmt_vec_info stmt_info) +{ + if (auto dr = STMT_VINFO_DATA_REF (stmt_info)) + return TREE_TYPE (DR_REF (dr)); + return NULL_TREE; +} + /* Decide whether to use the unrolling heuristic described above m_unrolled_advsimd_niters, updating that field if so. LOOP_VINFO describes the loop that we're vectorizing. */ @@ -15649,7 +15659,7 @@ aarch64_vector_costs::count_ops (unsigned int count, vect_cost_for_stmt kind, prev_count = num_copies; } ops->loads += num_copies; - if (vec_flags || FLOAT_TYPE_P (vectype)) + if (vec_flags || FLOAT_TYPE_P (aarch64_dr_type (stmt_info))) ops->general_ops += base_issue->fp_simd_load_general_ops * num_copies; break; @@ -15657,7 +15667,7 @@ aarch64_vector_costs::count_ops (unsigned int count, vect_cost_for_stmt kind, case unaligned_store: case scalar_store: ops->stores += num_copies; - if (vec_flags || FLOAT_TYPE_P (vectype)) + if (vec_flags || FLOAT_TYPE_P (aarch64_dr_type (stmt_info))) ops->general_ops += base_issue->fp_simd_store_general_ops * num_copies; break; } |