]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ChangeLog:
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Sep 2012 11:10:08 +0000 (11:10 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Sep 2012 11:10:08 +0000 (11:10 +0000)
* lower-subreg.c (enum classify_move_insn): Rename
SIMPLE_PSEUDO_REG_MOVE to DECOMPOSABLE_SIMPLE_MOVE.
(find_decomposable_subregs): Update.
(decompose_multiword_subregs): Add DECOMPOSE_COPIES parameter.
Only mark pseudo-to-pseudo copies as DECOMPOSABLE_SIMPLE_MOVE
if that parameter is true.
(rest_of_handle_lower_subreg): Call decompose_multiword_subregs
with DECOMPOSE_COPIES false.
(rest_of_handle_lower_subreg2): Call decompose_multiword_subregs
with DECOMPOSE_COPIES true.

testsuite/ChangeLog:

* gcc.dg/lower-subreg-1.c: Disable on arm-*-* targets.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191805 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/lower-subreg.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/lower-subreg-1.c

index b24a62cc9b38b617a68972bf8e70293fbb3bdfcf..fe86a66f6bf90ae5f099b943497e769b254c33e5 100644 (file)
@@ -1,3 +1,16 @@
+2012-09-27  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+       * lower-subreg.c (enum classify_move_insn): Rename
+       SIMPLE_PSEUDO_REG_MOVE to DECOMPOSABLE_SIMPLE_MOVE.
+       (find_decomposable_subregs): Update.
+       (decompose_multiword_subregs): Add DECOMPOSE_COPIES parameter.
+       Only mark pseudo-to-pseudo copies as DECOMPOSABLE_SIMPLE_MOVE
+       if that parameter is true.
+       (rest_of_handle_lower_subreg): Call decompose_multiword_subregs
+       with DECOMPOSE_COPIES false.
+       (rest_of_handle_lower_subreg2): Call decompose_multiword_subregs
+       with DECOMPOSE_COPIES true.
+
 2012-09-27  Marek Polacek  <polacek@redhat.com>
 
        * doc/gcov.texi (Gcov Data Files): Fix a typo.
index 4aaaa7754c5ca91858be2a7b594625693e5ed3b2..ab4ca36cdcb2ad2a7812ca06cb5904581dfdae8d 100644 (file)
@@ -440,9 +440,9 @@ enum classify_move_insn
 {
   /* Not a simple move from one location to another.  */
   NOT_SIMPLE_MOVE,
-  /* A simple move from one pseudo-register to another.  */
-  SIMPLE_PSEUDO_REG_MOVE,
-  /* A simple move involving a non-pseudo-register.  */
+  /* A simple move we want to decompose.  */
+  DECOMPOSABLE_SIMPLE_MOVE,
+  /* Any other simple move.  */
   SIMPLE_MOVE
 };
 
@@ -518,7 +518,7 @@ find_decomposable_subregs (rtx *px, void *data)
 
         If this is not a simple copy from one location to another,
         then we can not decompose this register.  If this is a simple
-        copy from one pseudo-register to another, and the mode is right
+        copy we want to decompose, and the mode is right,
         then we mark the register as decomposable.
         Otherwise we don't say anything about this register --
         it could be decomposed, but whether that would be
@@ -537,7 +537,7 @@ find_decomposable_subregs (rtx *px, void *data)
            case NOT_SIMPLE_MOVE:
              bitmap_set_bit (non_decomposable_context, regno);
              break;
-           case SIMPLE_PSEUDO_REG_MOVE:
+           case DECOMPOSABLE_SIMPLE_MOVE:
              if (MODES_TIEABLE_P (GET_MODE (x), word_mode))
                bitmap_set_bit (decomposable_context, regno);
              break;
@@ -553,7 +553,7 @@ find_decomposable_subregs (rtx *px, void *data)
       enum classify_move_insn cmi_mem = NOT_SIMPLE_MOVE;
 
       /* Any registers used in a MEM do not participate in a
-        SIMPLE_MOVE or SIMPLE_PSEUDO_REG_MOVE.  Do our own recursion
+        SIMPLE_MOVE or DECOMPOSABLE_SIMPLE_MOVE.  Do our own recursion
         here, and return -1 to block the parent's recursion.  */
       for_each_rtx (&XEXP (x, 0), find_decomposable_subregs, &cmi_mem);
       return -1;
@@ -1336,11 +1336,11 @@ dump_choices (bool speed_p, const char *description)
 }
 
 /* Look for registers which are always accessed via word-sized SUBREGs
-   or via copies.  Decompose these registers into several word-sized
-   pseudo-registers.  */
+   or -if DECOMPOSE_COPIES is true- via copies.  Decompose these
+   registers into several word-sized pseudo-registers.  */
 
 static void
-decompose_multiword_subregs (void)
+decompose_multiword_subregs (bool decompose_copies)
 {
   unsigned int max;
   basic_block bb;
@@ -1438,8 +1438,15 @@ decompose_multiword_subregs (void)
            cmi = NOT_SIMPLE_MOVE;
          else
            {
+             /* We mark pseudo-to-pseudo copies as decomposable during the
+                second pass only.  The first pass is so early that there is
+                good chance such moves will be optimized away completely by
+                subsequent optimizations anyway.
+
+                However, we call find_pseudo_copy even during the first pass
+                so as to properly set up the reg_copy_graph.  */
              if (find_pseudo_copy (set))
-               cmi = SIMPLE_PSEUDO_REG_MOVE;
+               cmi = decompose_copies? DECOMPOSABLE_SIMPLE_MOVE : SIMPLE_MOVE;
              else
                cmi = SIMPLE_MOVE;
            }
@@ -1640,7 +1647,7 @@ gate_handle_lower_subreg (void)
 static unsigned int
 rest_of_handle_lower_subreg (void)
 {
-  decompose_multiword_subregs ();
+  decompose_multiword_subregs (false);
   return 0;
 }
 
@@ -1649,7 +1656,7 @@ rest_of_handle_lower_subreg (void)
 static unsigned int
 rest_of_handle_lower_subreg2 (void)
 {
-  decompose_multiword_subregs ();
+  decompose_multiword_subregs (true);
   return 0;
 }
 
index c23166ee24a82bb545709169009b0dd792a6194d..6225c761d7b766f00e0893c14c4add4683622652 100644 (file)
@@ -1,3 +1,7 @@
+2012-09-27  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+       * gcc.dg/lower-subreg-1.c: Disable on arm-*-* targets.
+
 2012-09-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/54703
index 63be934054eb178611a6838b2b40c24bfeaf8d8a..8c7cc2c098b87faf5e6900c4dec1761b18903099 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { ! { mips64 || { ia64-*-* spu-*-* tilegx-*-* } } } } } */
+/* { dg-do compile { target { ! { mips64 || { arm-*-* ia64-*-* spu-*-* tilegx-*-* } } } } } */
 /* { dg-options "-O -fdump-rtl-subreg1" } */
 /* { dg-skip-if "" { { i?86-*-* x86_64-*-* } && x32 } { "*" } { "" } } */
 /* { dg-require-effective-target ilp32 } */