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.
(cherry picked from commit
4c31a3a6d31b6214ea774d403bf8ab7ebe1ea862)
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);
--- /dev/null
+/* 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;
+ }
+}