re PR rtl-optimization/64172 (Wrong code with GCC vector extensions on ARM when compi...
authorVladimir Makarov <vmakarov@redhat.com>
Fri, 20 Feb 2015 18:59:02 +0000 (18:59 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Fri, 20 Feb 2015 18:59:02 +0000 (18:59 +0000)
2015-02-20  Vladimir Makarov  <vmakarov@redhat.com>

PR target/64172
* ira-color.c (color_pass): Prevent splitting multi-register
pseudos.

From-SVN: r220877

gcc/ChangeLog
gcc/ira-color.c

index b1bd62283914d15b841d8e27969f5a99acbf3708..dad848907907d572e01017908ff9a6ffd3c876ad 100644 (file)
@@ -1,3 +1,9 @@
+2015-02-20  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/64172
+       * ira-color.c (color_pass): Prevent splitting multi-register
+       pseudos.
+
 2015-02-20  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/65136
index b77ff69e645aebc3ca403f07193046cb44dc05db..ff1fe8a78ad362491a671082c3fd34dec0d3ff92 100644 (file)
@@ -3274,7 +3274,11 @@ color_pass (ira_loop_tree_node_t loop_tree_node)
               && (loop_tree_node->reg_pressure[pclass]
                   <= ira_class_hard_regs_num[pclass]))
              || (pic_offset_table_rtx != NULL
-                 && regno == (int) REGNO (pic_offset_table_rtx)))
+                 && regno == (int) REGNO (pic_offset_table_rtx))
+             /* Avoid overlapped multi-registers. Moves between them
+                might result in wrong code generation.  */
+             || (hard_regno >= 0
+                 && ira_reg_class_max_nregs[pclass][mode] > 1))
            {
              if (! ALLOCNO_ASSIGNED_P (subloop_allocno))
                {