summaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2004-02-02 10:44:28 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2004-02-02 10:44:28 +0000
commit6f626d1bdf012ca311c77ec48194d1add0e5e052 (patch)
tree4d91485aa960e611410df76a5f8d37fa1dde04d2 /gcc/rtlanal.c
parente789e9c4709b0e52300749a9bf208f142988be98 (diff)
downloadgcc-6f626d1bdf012ca311c77ec48194d1add0e5e052.tar.gz
rtlanal.c (reg_overlap_mentioned_p): Don't test CONSTANT_P (x).
2004-02-02 Paolo Bonzini <bonzini@gnu.org> * rtlanal.c (reg_overlap_mentioned_p) [!ENABLE_CHECKING]: Don't test CONSTANT_P (x). (reg_overlap_mentioned_p): Merge check for STRICT_LOWPART, ZERO_EXTRACT, SIGN_EXTRACT with the switch statement. Fix misindentation. From-SVN: r77105
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 856af2f3a78..3744a327f20 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -1520,18 +1520,22 @@ reg_overlap_mentioned_p (rtx x, rtx in)
{
unsigned int regno, endregno;
- /* Overly conservative. */
- if (GET_CODE (x) == STRICT_LOW_PART
- || GET_CODE (x) == ZERO_EXTRACT
- || GET_CODE (x) == SIGN_EXTRACT)
- x = XEXP (x, 0);
-
- /* If either argument is a constant, then modifying X can not affect IN. */
- if (CONSTANT_P (x) || CONSTANT_P (in))
+ /* If either argument is a constant, then modifying X can not
+ affect IN. Here we look at IN, we can profitably combine
+ CONSTANT_P (x) with the switch statement below. */
+ if (CONSTANT_P (in))
return 0;
+ recurse:
switch (GET_CODE (x))
{
+ case STRICT_LOW_PART:
+ case ZERO_EXTRACT:
+ case SIGN_EXTRACT:
+ /* Overly conservative. */
+ x = XEXP (x, 0);
+ goto recurse;
+
case SUBREG:
regno = REGNO (SUBREG_REG (x));
if (regno < FIRST_PSEUDO_REGISTER)
@@ -1574,15 +1578,18 @@ reg_overlap_mentioned_p (rtx x, rtx in)
for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
if (XEXP (XVECEXP (x, 0, i), 0) != 0
&& reg_overlap_mentioned_p (XEXP (XVECEXP (x, 0, i), 0), in))
- return 1;
+ return 1;
return 0;
}
default:
- break;
- }
+#ifdef ENABLE_CHECKING
+ if (!CONSTANT_P (x))
+ abort ();
+#endif
- abort ();
+ return 0;
+ }
}
/* Return the last value to which REG was set prior to INSN. If we can't