[gcc(refs/vendors/ARM/heads/arm-14.3)] arm, mve: Fix arm_mve_dlstp_check_dec_counter's use of single_pred
Andre Simoes Dias Vieira
avieira@gcc.gnu.org
Mon Jun 23 14:50:30 GMT 2025
https://gcc.gnu.org/g:e9a0a09b15bfaa706c6f5b0b1d29d81942096af7
commit e9a0a09b15bfaa706c6f5b0b1d29d81942096af7
Author: Andre Vieira <andre.simoesdiasvieira@arm.com>
Date: Wed Nov 20 09:23:50 2024 +0000
arm, mve: Fix arm_mve_dlstp_check_dec_counter's use of single_pred
Call 'single_pred_p' before 'single_pred' to verify it is safe to do so.
gcc/ChangeLog:
* config/arm/arm.cc (arm_mve_dlstp_check_dec_counter): Call
single_pred_p to verify it's safe to call single_pred.
gcc/testsuite/ChangeLog:
* gcc.target/arm/mve/dlstp-loop-form.c: Add loop that triggered ICE.
(cherry picked from commit 3ec0b7cd7ce7b64b58cb0ee52fb95fb0875c805c)
Diff:
---
gcc/config/arm/arm.cc | 5 +++--
gcc/testsuite/gcc.target/arm/mve/dlstp-loop-form.c | 12 ++++++++++++
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc
index 9185ce2c12ea..e5983242009f 100644
--- a/gcc/config/arm/arm.cc
+++ b/gcc/config/arm/arm.cc
@@ -35443,9 +35443,10 @@ arm_mve_dlstp_check_dec_counter (loop *loop, rtx_insn* vctp_insn,
return NULL;
else if (REG_P (condconst))
{
- basic_block pre_loop_bb = single_pred (loop_preheader_edge (loop)->src);
- if (!pre_loop_bb)
+ basic_block preheader_b = loop_preheader_edge (loop)->src;
+ if (!single_pred_p (preheader_b))
return NULL;
+ basic_block pre_loop_bb = single_pred (preheader_b);
rtx initial_compare = NULL_RTX;
if (!(prev_nonnote_nondebug_insn_bb (BB_END (pre_loop_bb))
diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-loop-form.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-loop-form.c
index 2dc9c4f8bfe1..ca46bcb499a8 100644
--- a/gcc/testsuite/gcc.target/arm/mve/dlstp-loop-form.c
+++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-loop-form.c
@@ -24,3 +24,15 @@ void n() {
}
}
+int a;
+void g2() {
+ long b;
+ while (a) {
+ char *c;
+ for (long d = b; d > 0; d -= 4) {
+ mve_pred16_t e = vctp32q(d);
+ int32x4_t f;
+ vstrbq_p_s32(c, f, e);
+ }
+ }
+}
More information about the Gcc-cvs
mailing list