summaryrefslogtreecommitdiff
path: root/gcc/cselib.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2001-08-08 10:38:57 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2001-08-08 10:38:57 +0000
commit917004442036172e64e70b1d0a4a7392069af9cd (patch)
tree7400c2594762a88011f7c77c8ed35b1d7229f9df /gcc/cselib.c
parent4b6c5340748f9914998e4beafe3832acfe5d8aae (diff)
downloadgcc-917004442036172e64e70b1d0a4a7392069af9cd.tar.gz
Make cselib_subst_to_values global.
From-SVN: r44717
Diffstat (limited to 'gcc/cselib.c')
-rw-r--r--gcc/cselib.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/gcc/cselib.c b/gcc/cselib.c
index 13117668006..89a274f1e14 100644
--- a/gcc/cselib.c
+++ b/gcc/cselib.c
@@ -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;
}