diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2025-07-10 22:00:41 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2025-07-10 22:00:41 +0100 |
commit | a1e616955e9971fda54a160a49e6cf70dd838a0c (patch) | |
tree | 27876aca14d33ab42a1f8d94150404f89d8fe7ca | |
parent | e53f481141f1415847329f3bef906e5eb91226ad (diff) | |
download | gcc-a1e616955e9971fda54a160a49e6cf70dd838a0c.zip gcc-a1e616955e9971fda54a160a49e6cf70dd838a0c.tar.gz gcc-a1e616955e9971fda54a160a49e6cf70dd838a0c.tar.bz2 |
aarch64: Guard VF-based costing with !m_costing_for_scalar
g:4b47acfe2b626d1276e229a0cf165e934813df6c caused a segfault
in aarch64_vector_costs::analyze_loop_vinfo when costing scalar
code, since we'd end up dividing by a zero VF.
Much of the structure of the aarch64 costing code dates from
a stage 4 patch, when we had to work within the bounds of what
the target-independent code did. Some of it could do with a
rework now that we're not so constrained.
This patch is therefore an emergency fix rather than the best
long-term solution. I'll revisit when I have more time to think
about it.
gcc/
* config/aarch64/aarch64.cc (aarch64_vector_costs::add_stmt_cost):
Guard VF-based costing with !m_costing_for_scalar.
-rw-r--r-- | gcc/config/aarch64/aarch64.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 27c315f..10b8ed5 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -17932,7 +17932,7 @@ aarch64_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, /* Do one-time initialization based on the vinfo. */ loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (m_vinfo); - if (!m_analyzed_vinfo) + if (!m_analyzed_vinfo && !m_costing_for_scalar) { if (loop_vinfo) analyze_loop_vinfo (loop_vinfo); |