sparc.md (ldd peephole2s): Fix final arg to mems_ok_for_ldd_peep when the order of...
authorDavid S. Miller <davem@redhat.com>
Wed, 3 Apr 2002 06:31:45 +0000 (22:31 -0800)
committerDavid S. Miller <davem@gcc.gnu.org>
Wed, 3 Apr 2002 06:31:45 +0000 (22:31 -0800)
2002-04-02  David S. Miller  <davem@redhat.com>

* config/sparc/sparc.md (ldd peephole2s): Fix final arg to
mems_ok_for_ldd_peep when the order of the loads being examined
is reversed.
* config/sparc/sparc.c (mems_ok_for_ldd_peep): Expand upon
existing comment to increase comprehension of this situation.

From-SVN: r51796

gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md

index f24e24052a7e6a56320d1e295fbd5f5b7524a398..d4522513a732e398b9ec470ec3c9172561306ace 100644 (file)
@@ -1,3 +1,11 @@
+2002-04-02  David S. Miller  <davem@redhat.com>
+
+       * config/sparc/sparc.md (ldd peephole2s): Fix final arg to
+       mems_ok_for_ldd_peep when the order of the loads being examined
+       is reversed.
+       * config/sparc/sparc.c (mems_ok_for_ldd_peep): Expand upon
+       existing comment to increase comprehension of this situation.
+
 2002-04-02  Zack Weinberg  <zack@codesourcery.com>
 
        * config/sh/sh.md: Don't use union real_extract.
index 4071f5a277c4372ecd271e2627801b26573b8932..7df4df6e0fb6ff437d3382ecae95a1409e8edfbc 100644 (file)
@@ -5798,6 +5798,20 @@ registers_ok_for_ldd_peep (reg1, reg2)
        ld [%o0 + 4], %o1
    to
        ldd [%o0], %o0
+   nor:
+       ld [%g3 + 4], %g3
+       ld [%g3], %g2
+   to
+        ldd [%g3], %g2
+
+   But, note that the transformation from:
+       ld [%g2 + 4], %g3
+        ld [%g2], %g2
+   to
+       ldd [%g2], %g2
+   is perfectly fine.  Thus, the peephole2 patterns always pass us
+   the destination register of the first load, never the second one.
+
    For stores we don't have a similar problem, so dependent_reg_rtx is
    NULL_RTX.  */
 
index 2426db5632dfc4d2bc8e110ac08ce6bacb49417a..d783fea8a2f101cd4a75a2f3bb449b5a23c14105 100644 (file)
    (set (match_operand:SI 2 "register_operand" "")
         (match_operand:SI 3 "memory_operand" ""))]
   "registers_ok_for_ldd_peep (operands[2], operands[0]) 
-  && mems_ok_for_ldd_peep (operands[3], operands[1], operands[2])"
+  && mems_ok_for_ldd_peep (operands[3], operands[1], operands[0])"
   [(set (match_dup 2)
        (match_dup 3))]
    "operands[3] = change_address (operands[3], DImode, NULL);
    (set (match_operand:SF 2 "register_operand" "")
         (match_operand:SF 3 "memory_operand" ""))]
   "registers_ok_for_ldd_peep (operands[2], operands[0]) 
-  && mems_ok_for_ldd_peep (operands[3], operands[1], operands[2])"
+  && mems_ok_for_ldd_peep (operands[3], operands[1], operands[0])"
   [(set (match_dup 2)
        (match_dup 3))]
   "operands[3] = change_address (operands[3], DFmode, NULL);