mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-11-28 12:21:05 +08:00
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.
This commit is contained in:
parent
95b5fd7316
commit
3ec0b7cd7c
@ -35379,9 +35379,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))
|
||||
|
@ -25,3 +25,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user