]> gcc.gnu.org Git - gcc.git/commitdiff
rtlanal.c (reg_overlap_mentioned_p): Don't test CONSTANT_P (x).
authorPaolo Bonzini <bonzini@gnu.org>
Mon, 2 Feb 2004 10:44:28 +0000 (10:44 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 2 Feb 2004 10:44:28 +0000 (10:44 +0000)
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

gcc/ChangeLog
gcc/rtlanal.c

index 723b916bef49caae8425a825d7949d47283475c8..bbd7f72621ba235b0e1d67a21d7308303485576d 100644 (file)
@@ -1,3 +1,11 @@
+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.
+
 2004-02-02  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * doc/invoke.texi (SPARC options): Document that -mflat is deprecated.
index 856af2f3a78176a7d61883dfbfecb2078cb1cdf5..3744a327f20611bfa75c2b88b710e9be61c0c0c4 100644 (file)
@@ -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;
+    }
 }
 \f
 /* Return the last value to which REG was set prior to INSN.  If we can't
This page took 0.068175 seconds and 5 git commands to generate.