Commit 21ca87b8 by Mike Stump Committed by Jeff Law

rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after reload completes.

        * rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after
        reload completes.
        * genattrtab.c (reload_completed): Define.
        * m32r.md, mips.md, mn10200.md, mn10300.md, pyr.md: Remove obsolete
        comments.

From-SVN: r17542
parent d2c92f5a
1998-01-28 Mike Stump <mrs@wrs.com>
* rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after
reload completes.
* genattrtab.c (reload_completed): Define.
* m32r.md, mips.md, mn10200.md, mn10300.md, pyr.md: Remove obsolete
comments.
Wed Jan 28 20:11:06 1998 J"orn Rennecke <amylaar@cygnus.co.uk> Wed Jan 28 20:11:06 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the * reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
......
...@@ -379,8 +379,6 @@ ...@@ -379,8 +379,6 @@
{ {
/* Try to use auto-inc addressing if we can. */ /* Try to use auto-inc addressing if we can. */
if (GET_CODE (XEXP (operands[1], 0)) == REG if (GET_CODE (XEXP (operands[1], 0)) == REG
/* ??? This is WRONG, dead_or_set_p cannot be used after reload
because the REG_DEAD notes are not maintained after reload. */
&& dead_or_set_p (insn, XEXP (operands[1], 0))) && dead_or_set_p (insn, XEXP (operands[1], 0)))
{ {
operands[1] = XEXP (operands[1], 0); operands[1] = XEXP (operands[1], 0);
...@@ -391,8 +389,6 @@ ...@@ -391,8 +389,6 @@
case 3 : case 3 :
/* Try to use auto-inc addressing if we can. */ /* Try to use auto-inc addressing if we can. */
if (GET_CODE (XEXP (operands[0], 0)) == REG if (GET_CODE (XEXP (operands[0], 0)) == REG
/* ??? This is WRONG, dead_or_set_p cannot be used after reload
because the REG_DEAD notes are not maintained after reload. */
&& dead_or_set_p (insn, XEXP (operands[0], 0))) && dead_or_set_p (insn, XEXP (operands[0], 0)))
{ {
operands[0] = XEXP (operands[0], 0); operands[0] = XEXP (operands[0], 0);
...@@ -534,8 +530,6 @@ ...@@ -534,8 +530,6 @@
{ {
/* Try to use auto-inc addressing if we can. */ /* Try to use auto-inc addressing if we can. */
if (GET_CODE (XEXP (operands[1], 0)) == REG if (GET_CODE (XEXP (operands[1], 0)) == REG
/* ??? This is WRONG, dead_or_set_p cannot be used after reload
because the REG_DEAD notes are not maintained after reload. */
&& dead_or_set_p (insn, XEXP (operands[1], 0))) && dead_or_set_p (insn, XEXP (operands[1], 0)))
{ {
operands[1] = XEXP (operands[1], 0); operands[1] = XEXP (operands[1], 0);
...@@ -546,8 +540,6 @@ ...@@ -546,8 +540,6 @@
case 3 : case 3 :
/* Try to use auto-inc addressing if we can. */ /* Try to use auto-inc addressing if we can. */
if (GET_CODE (XEXP (operands[0], 0)) == REG if (GET_CODE (XEXP (operands[0], 0)) == REG
/* ??? This is WRONG, dead_or_set_p cannot be used after reload
because the REG_DEAD notes are not maintained after reload. */
&& dead_or_set_p (insn, XEXP (operands[0], 0))) && dead_or_set_p (insn, XEXP (operands[0], 0)))
{ {
operands[0] = XEXP (operands[0], 0); operands[0] = XEXP (operands[0], 0);
...@@ -1471,8 +1463,6 @@ ...@@ -1471,8 +1463,6 @@
[(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "r") [(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "r")
(const_int 4))) (const_int 4)))
(match_operand:SI 1 "register_operand" "r"))] (match_operand:SI 1 "register_operand" "r"))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (insn, operands[0])" "dead_or_set_p (insn, operands[0])"
"st %1,@+%0" "st %1,@+%0"
[(set_attr "type" "store") [(set_attr "type" "store")
......
...@@ -9771,8 +9771,6 @@ move\\t%0,%z4\\n\\ ...@@ -9771,8 +9771,6 @@ move\\t%0,%z4\\n\\
"TARGET_MIPS16 "TARGET_MIPS16
&& GET_CODE (operands[0]) == REG && GET_CODE (operands[0]) == REG
&& REGNO (operands[0]) == 24 && REGNO (operands[0]) == 24
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
&& dead_or_set_p (insn, operands[0]) && dead_or_set_p (insn, operands[0])
&& GET_CODE (operands[1]) == REG && GET_CODE (operands[1]) == REG
&& M16_REG_P (REGNO (operands[1]))" && M16_REG_P (REGNO (operands[1]))"
...@@ -9798,8 +9796,6 @@ move\\t%0,%z4\\n\\ ...@@ -9798,8 +9796,6 @@ move\\t%0,%z4\\n\\
"TARGET_MIPS16 && TARGET_64BIT "TARGET_MIPS16 && TARGET_64BIT
&& GET_CODE (operands[0]) == REG && GET_CODE (operands[0]) == REG
&& REGNO (operands[0]) == 24 && REGNO (operands[0]) == 24
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
&& dead_or_set_p (insn, operands[0]) && dead_or_set_p (insn, operands[0])
&& GET_CODE (operands[1]) == REG && GET_CODE (operands[1]) == REG
&& M16_REG_P (REGNO (operands[1]))" && M16_REG_P (REGNO (operands[1]))"
...@@ -9831,8 +9827,6 @@ move\\t%0,%z4\\n\\ ...@@ -9831,8 +9827,6 @@ move\\t%0,%z4\\n\\
&& REGNO (operands[1]) == 24 && REGNO (operands[1]) == 24
&& GET_CODE (operands[0]) == REG && GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0])) && M16_REG_P (REGNO (operands[0]))
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
&& dead_or_set_p (insn, operands[0])" && dead_or_set_p (insn, operands[0])"
"* "*
{ {
...@@ -9858,8 +9852,6 @@ move\\t%0,%z4\\n\\ ...@@ -9858,8 +9852,6 @@ move\\t%0,%z4\\n\\
&& REGNO (operands[1]) == 24 && REGNO (operands[1]) == 24
&& GET_CODE (operands[0]) == REG && GET_CODE (operands[0]) == REG
&& M16_REG_P (REGNO (operands[0])) && M16_REG_P (REGNO (operands[0]))
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
&& dead_or_set_p (insn, operands[0])" && dead_or_set_p (insn, operands[0])"
"* "*
{ {
......
...@@ -1888,8 +1888,6 @@ ...@@ -1888,8 +1888,6 @@
(set (pc) (if_then_else (ge (cc0) (const_int 0)) (set (pc) (if_then_else (ge (cc0) (const_int 0))
(match_operand 1 "" "") (match_operand 1 "" "")
(pc)))] (pc)))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcc %1" "add %0,%0\;bcc %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1899,8 +1897,6 @@ ...@@ -1899,8 +1897,6 @@
(set (pc) (if_then_else (lt (cc0) (const_int 0)) (set (pc) (if_then_else (lt (cc0) (const_int 0))
(match_operand 1 "" "") (match_operand 1 "" "")
(pc)))] (pc)))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcs %1" "add %0,%0\;bcs %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1910,8 +1906,6 @@ ...@@ -1910,8 +1906,6 @@
(set (pc) (if_then_else (ge (cc0) (const_int 0)) (set (pc) (if_then_else (ge (cc0) (const_int 0))
(pc) (pc)
(match_operand 1 "" "")))] (match_operand 1 "" "")))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcs %1" "add %0,%0\;bcs %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1921,8 +1915,6 @@ ...@@ -1921,8 +1915,6 @@
(set (pc) (if_then_else (lt (cc0) (const_int 0)) (set (pc) (if_then_else (lt (cc0) (const_int 0))
(pc) (pc)
(match_operand 1 "" "")))] (match_operand 1 "" "")))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcc %1" "add %0,%0\;bcc %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1932,8 +1924,6 @@ ...@@ -1932,8 +1924,6 @@
(set (pc) (if_then_else (ge (cc0) (const_int 0)) (set (pc) (if_then_else (ge (cc0) (const_int 0))
(match_operand 1 "" "") (match_operand 1 "" "")
(pc)))] (pc)))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bccx %1" "add %0,%0\;bccx %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1943,8 +1933,6 @@ ...@@ -1943,8 +1933,6 @@
(set (pc) (if_then_else (lt (cc0) (const_int 0)) (set (pc) (if_then_else (lt (cc0) (const_int 0))
(match_operand 1 "" "") (match_operand 1 "" "")
(pc)))] (pc)))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcsx %1" "add %0,%0\;bcsx %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1954,8 +1942,6 @@ ...@@ -1954,8 +1942,6 @@
(set (pc) (if_then_else (ge (cc0) (const_int 0)) (set (pc) (if_then_else (ge (cc0) (const_int 0))
(pc) (pc)
(match_operand 1 "" "")))] (match_operand 1 "" "")))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcsx %1" "add %0,%0\;bcsx %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1965,8 +1951,6 @@ ...@@ -1965,8 +1951,6 @@
(set (pc) (if_then_else (lt (cc0) (const_int 0)) (set (pc) (if_then_else (lt (cc0) (const_int 0))
(pc) (pc)
(match_operand 1 "" "")))] (match_operand 1 "" "")))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bccx %1" "add %0,%0\;bccx %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
......
...@@ -1397,8 +1397,6 @@ ...@@ -1397,8 +1397,6 @@
(set (pc) (if_then_else (ge (cc0) (const_int 0)) (set (pc) (if_then_else (ge (cc0) (const_int 0))
(match_operand 1 "" "") (match_operand 1 "" "")
(pc)))] (pc)))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcc %1" "add %0,%0\;bcc %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1408,8 +1406,6 @@ ...@@ -1408,8 +1406,6 @@
(set (pc) (if_then_else (lt (cc0) (const_int 0)) (set (pc) (if_then_else (lt (cc0) (const_int 0))
(match_operand 1 "" "") (match_operand 1 "" "")
(pc)))] (pc)))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcs %1" "add %0,%0\;bcs %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1419,8 +1415,6 @@ ...@@ -1419,8 +1415,6 @@
(set (pc) (if_then_else (ge (cc0) (const_int 0)) (set (pc) (if_then_else (ge (cc0) (const_int 0))
(pc) (pc)
(match_operand 1 "" "")))] (match_operand 1 "" "")))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcs %1" "add %0,%0\;bcs %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
...@@ -1430,8 +1424,6 @@ ...@@ -1430,8 +1424,6 @@
(set (pc) (if_then_else (lt (cc0) (const_int 0)) (set (pc) (if_then_else (lt (cc0) (const_int 0))
(pc) (pc)
(match_operand 1 "" "")))] (match_operand 1 "" "")))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])" "dead_or_set_p (ins1, operands[0]) && REG_OK_FOR_INDEX_P (operands[0])"
"add %0,%0\;bcc %1" "add %0,%0\;bcc %1"
[(set_attr "cc" "clobber")]) [(set_attr "cc" "clobber")])
......
...@@ -1224,8 +1224,6 @@ ...@@ -1224,8 +1224,6 @@
(sign_extend:SI (match_dup 1))) (sign_extend:SI (match_dup 1)))
(set (cc0) (set (cc0)
(match_dup 2))] (match_dup 2))]
;; ??? This is WRONG, dead_or_set_p cannot be used after reload
;; because the REG_DEAD notes are not maintained after reload.
"dead_or_set_p (insn, operands[2])" "dead_or_set_p (insn, operands[2])"
"* "*
cc_status.flags |= CC_NO_OVERFLOW; cc_status.flags |= CC_NO_OVERFLOW;
......
...@@ -348,6 +348,11 @@ static rtx true_rtx, false_rtx; ...@@ -348,6 +348,11 @@ static rtx true_rtx, false_rtx;
static char *alternative_name; static char *alternative_name;
/* Indicate that REG_DEAD notes are valid if dead_or_set_p is ever
called. */
int reload_completed = 0;
/* Simplify an expression. Only call the routine if there is something to /* Simplify an expression. Only call the routine if there is something to
simplify. */ simplify. */
#define SIMPLIFY_TEST_EXP(EXP,INSN_CODE,INSN_INDEX) \ #define SIMPLIFY_TEST_EXP(EXP,INSN_CODE,INSN_INDEX) \
......
...@@ -1157,10 +1157,20 @@ dead_or_set_regno_p (insn, test_regno) ...@@ -1157,10 +1157,20 @@ dead_or_set_regno_p (insn, test_regno)
int regno, endregno; int regno, endregno;
rtx link; rtx link;
/* See if there is a death note for something that includes TEST_REGNO. */ /* REG_READ notes are not normally maintained after reload, so we
ignore them if the are invalid. */
if (! reload_completed
#ifdef PRESERVE_DEATH_INFO_REGNO_P
|| PRESERVE_DEATH_INFO_REGNO_P (test_regno)
#endif
)
{
/* See if there is a death note for something that includes
TEST_REGNO. */
for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
{ {
if (REG_NOTE_KIND (link) != REG_DEAD || GET_CODE (XEXP (link, 0)) != REG) if (REG_NOTE_KIND (link) != REG_DEAD
|| GET_CODE (XEXP (link, 0)) != REG)
continue; continue;
regno = REGNO (XEXP (link, 0)); regno = REGNO (XEXP (link, 0));
...@@ -1171,6 +1181,7 @@ dead_or_set_regno_p (insn, test_regno) ...@@ -1171,6 +1181,7 @@ dead_or_set_regno_p (insn, test_regno)
if (test_regno >= regno && test_regno < endregno) if (test_regno >= regno && test_regno < endregno)
return 1; return 1;
} }
}
if (GET_CODE (insn) == CALL_INSN if (GET_CODE (insn) == CALL_INSN
&& find_regno_fusage (insn, CLOBBER, test_regno)) && find_regno_fusage (insn, CLOBBER, test_regno))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment