ira: Make sure allocno copies are ordered [PR98791]

gcc/ChangeLog:
2021-02-22  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	PR rtl-optimization/98791
	* ira-conflicts.c (process_regs_for_copy): Don't create allocno copies
	for unordered modes.

gcc/testsuite/ChangeLog:
2021-02-22  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	PR rtl-optimization/98791
	* gcc.target/aarch64/sve/pr98791.c: New test.
This commit is contained in:
Andre Vieira 2021-02-22 13:41:46 +00:00
parent e9b34037cd
commit 4c31a3a6d3
2 changed files with 16 additions and 1 deletions

View File

@ -275,7 +275,10 @@ process_regs_for_copy (rtx reg1, rtx reg2, bool constraint_p,
ira_allocno_t a1 = ira_curr_regno_allocno_map[REGNO (reg1)];
ira_allocno_t a2 = ira_curr_regno_allocno_map[REGNO (reg2)];
if (!allocnos_conflict_for_copy_p (a1, a2) && offset1 == offset2)
if (!allocnos_conflict_for_copy_p (a1, a2)
&& offset1 == offset2
&& ordered_p (GET_MODE_PRECISION (ALLOCNO_MODE (a1)),
GET_MODE_PRECISION (ALLOCNO_MODE (a2))))
{
cp = ira_add_allocno_copy (a1, a2, freq, constraint_p, insn,
ira_curr_loop_tree_node);

View File

@ -0,0 +1,12 @@
/* PR rtl-optimization/98791 */
/* { dg-do compile } */
/* { dg-options "-O -ftree-vectorize" } */
#include <arm_sve.h>
extern char a[11];
extern long b[];
void f() {
for (int d; d < 10; d++) {
a[d] = svaddv(svptrue_b8(), svdup_u8(0));
b[d] = 0;
}
}