]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Make cselib_subst_to_values global.
authorBernd Schmidt <bernds@redhat.com>
Wed, 8 Aug 2001 10:38:57 +0000 (10:38 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 8 Aug 2001 10:38:57 +0000 (10:38 +0000)
From-SVN: r44717

gcc/ChangeLog
gcc/cselib.c
gcc/cselib.h

index 4b5de1919db7375f1610f23c112272206e74f17d..aa78d55115cf5cc51406507b0bba81621fe7eb55 100644 (file)
        * sched-rgn.c (rgn_sched_info): Likewise.
        * Makefile.in (sched-deps.o): Update dependencies.
 
+       * cselib.h (cselib_subst_to_values): Declare.
+       * cselib.c (cselib_subst_to_values): No longer static.  Allow MEMs
+       that have no value and autoincs to be handled by generating a new
+       dummy value.
+       
 2001-08-08  Graham Stott  <grahams@redhat.com>
 
        * final.c (shorten_branches): Update the INSN_ADDRESSES of insns
index 1311766800635d1ad7ff4cb7080f8a4c0936b32e..89a274f1e14dac5a9a9549731d266fb7eead4315 100644 (file)
@@ -60,7 +60,6 @@ static cselib_val *new_cselib_val     PARAMS ((unsigned int,
 static void add_mem_for_addr           PARAMS ((cselib_val *, cselib_val *,
                                                 rtx));
 static cselib_val *cselib_lookup_mem   PARAMS ((rtx, int));
-static rtx cselib_subst_to_values      PARAMS ((rtx));
 static void cselib_invalidate_regno    PARAMS ((unsigned int,
                                                 enum machine_mode));
 static int cselib_mem_conflict_p       PARAMS ((rtx, rtx));
@@ -765,7 +764,7 @@ cselib_lookup_mem (x, create)
    X isn't actually modified; if modifications are needed, new rtl is
    allocated.  However, the return value can share rtl with X.  */
 
-static rtx
+rtx
 cselib_subst_to_values (x)
      rtx x;
 {
@@ -788,7 +787,11 @@ cselib_subst_to_values (x)
     case MEM:
       e = cselib_lookup_mem (x, 0);
       if (! e)
-       abort ();
+       {
+         /* This happens for autoincrements.  Assign a value that doesn't
+            match any other.  */
+         e = new_cselib_val (++next_unknown_value, GET_MODE (x));
+       }
       return e->u.val_rtx;
 
       /* CONST_DOUBLEs must be special-cased here so that we won't try to
@@ -797,6 +800,15 @@ cselib_subst_to_values (x)
     case CONST_INT:
       return x;
 
+    case POST_INC:
+    case PRE_INC:
+    case POST_DEC:
+    case PRE_DEC:
+    case POST_MODIFY:
+    case PRE_MODIFY:
+      e = new_cselib_val (++next_unknown_value, GET_MODE (x));
+      return e->u.val_rtx;
+      
     default:
       break;
     }
index 59f811ad5e1ffa24defd38e1289f59ff99c7d220..a3f7ee9c799a55615078a51727802b9620461e62 100644 (file)
@@ -65,3 +65,4 @@ extern void cselib_finish             PARAMS ((void));
 extern void cselib_process_insn                PARAMS ((rtx));
 extern int rtx_equal_for_cselib_p      PARAMS ((rtx, rtx));
 extern int references_value_p          PARAMS ((rtx, int));
+extern rtx cselib_subst_to_values      PARAMS ((rtx));