diff options
Diffstat (limited to 'gcc/cselib.c')
-rw-r--r-- | gcc/cselib.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/cselib.c b/gcc/cselib.c index e7c4221df3e..1f9f97efc5d 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -210,6 +210,9 @@ void (*cselib_record_sets_hook) (rtx insn, struct cselib_set *sets, #define PRESERVED_VALUE_P(RTX) \ (RTL_FLAG_CHECK1("PRESERVED_VALUE_P", (RTX), VALUE)->unchanging) +#define SP_BASED_VALUE_P(RTX) \ + (RTL_FLAG_CHECK1("SP_BASED_VALUE_P", (RTX), VALUE)->jump) + /* Allocate a struct elt_list and fill in its two elements with the @@ -739,6 +742,24 @@ cselib_preserve_only_values (void) gcc_assert (first_containing_mem == &dummy_val); } +/* Arrange for a value to be marked as based on stack pointer + for find_base_term purposes. */ + +void +cselib_set_value_sp_based (cselib_val *v) +{ + SP_BASED_VALUE_P (v->val_rtx) = 1; +} + +/* Test whether a value is based on stack pointer for + find_base_term purposes. */ + +bool +cselib_sp_based_value_p (cselib_val *v) +{ + return SP_BASED_VALUE_P (v->val_rtx); +} + /* Return the mode in which a register was last set. If X is not a register, return its mode. If the mode in which the register was set is not known, or the value was already clobbered, return |