Make cselib_subst_to_values global.
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Aug 2001 10:38:57 +0000 (10:38 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Aug 2001 10:38:57 +0000 (10:38 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44717 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 4b5de19..aa78d55 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 1311766..89a274f 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 59f811a..a3f7ee9 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));