diff options
author | Anatoly Sokolov <aesok@post.ru> | 2015-10-30 23:56:32 +0300 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2015-10-30 23:56:32 +0300 |
commit | d614335f7796ca828cfab1a9e789bbb91165755b (patch) | |
tree | 2e6dad106e2c0be6d7bcd62276c61e90c5b1dc22 | |
parent | a6906c809772feaead79e533e79535bd03a49aa6 (diff) | |
download | gcc-d614335f7796ca828cfab1a9e789bbb91165755b.zip gcc-d614335f7796ca828cfab1a9e789bbb91165755b.tar.gz gcc-d614335f7796ca828cfab1a9e789bbb91165755b.tar.bz2 |
Add contains_symbol_ref_p
From-SVN: r229607
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/lra-constraints.c | 29 | ||||
-rw-r--r-- | gcc/rtl.h | 4 | ||||
-rw-r--r-- | gcc/rtlanal.c | 13 | ||||
-rw-r--r-- | gcc/var-tracking.c | 39 |
5 files changed, 28 insertions, 67 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ee6a34f..1b4725e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2015-10-30 Anatoly Sokolov <aesok@post.ru> + + * rtl.h (contains_symbol_ref_p): Declare. + (SYMBOL_REF_P): Define. + * rtlanal.c (contains_symbol_ref_p: New function. + * lra-constraints.c (contains_symbol_ref_p): Remove. + * var-tracking.c (contains_symbol_ref): Remove. + (track_expr_p): Use contains_symbol_ref_p instead of + contains_symbol_ref. + 2015-10-30 Alan Lawrence <alan.lawrence@arm.com> * gimple-fold.c (fold_array_ctor_reference): Move searching code to: diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 0379db9..4670e81 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4001,35 +4001,6 @@ contains_reg_p (rtx x, bool hard_reg_p, bool spilled_p) return false; } -/* Return true if X contains a symbol reg. */ -static bool -contains_symbol_ref_p (rtx x) -{ - int i, j; - const char *fmt; - enum rtx_code code; - - code = GET_CODE (x); - if (code == SYMBOL_REF) - return true; - fmt = GET_RTX_FORMAT (code); - for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) - { - if (fmt[i] == 'e') - { - if (contains_symbol_ref_p (XEXP (x, i))) - return true; - } - else if (fmt[i] == 'E') - { - for (j = XVECLEN (x, i) - 1; j >= 0; j--) - if (contains_symbol_ref_p (XVECEXP (x, i, j))) - return true; - } - } - return false; -} - /* Process all regs in location *LOC and change them on equivalent substitution. Return true if any change was done. */ static bool @@ -829,6 +829,9 @@ struct GTY(()) rtvec_def { /* Predicate yielding nonzero iff RTX is a subreg. */ #define SUBREG_P(RTX) (GET_CODE (RTX) == SUBREG) +/* Predicate yielding true iff RTX is a symbol ref. */ +#define SYMBOL_REF_P(RTX) (GET_CODE (RTX) == SYMBOL_REF) + template <> template <> inline bool @@ -2926,6 +2929,7 @@ extern void set_insn_deleted (rtx); /* Functions in rtlanal.c */ extern rtx single_set_2 (const rtx_insn *, const_rtx); +extern bool contains_symbol_ref_p (const_rtx); /* Handle the cheap and common cases inline for performance. */ diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 7bc3fdb..67098e5 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -6230,6 +6230,19 @@ get_index_code (const struct address_info *info) return SCRATCH; } +/* Return true if RTL X contains a SYMBOL_REF. */ + +bool +contains_symbol_ref_p (const_rtx x) +{ + subrtx_iterator::array_type array; + FOR_EACH_SUBRTX (iter, array, x, ALL) + if (SYMBOL_REF_P (*iter)) + return true; + + return false; +} + /* Return true if X contains a thread-local symbol. */ bool diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 2f7c761..72f2e81 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -664,7 +664,6 @@ static bool variable_different_p (variable *, variable *); static bool dataflow_set_different (dataflow_set *, dataflow_set *); static void dataflow_set_destroy (dataflow_set *); -static bool contains_symbol_ref (rtx); static bool track_expr_p (tree, bool); static bool same_variable_part_p (rtx, tree, HOST_WIDE_INT); static void add_uses_1 (rtx *, void *); @@ -5021,42 +5020,6 @@ dataflow_set_destroy (dataflow_set *set) set->vars = NULL; } -/* Return true if RTL X contains a SYMBOL_REF. */ - -static bool -contains_symbol_ref (rtx x) -{ - const char *fmt; - RTX_CODE code; - int i; - - if (!x) - return false; - - code = GET_CODE (x); - if (code == SYMBOL_REF) - return true; - - fmt = GET_RTX_FORMAT (code); - for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) - { - if (fmt[i] == 'e') - { - if (contains_symbol_ref (XEXP (x, i))) - return true; - } - else if (fmt[i] == 'E') - { - int j; - for (j = 0; j < XVECLEN (x, i); j++) - if (contains_symbol_ref (XVECEXP (x, i, j))) - return true; - } - } - - return false; -} - /* Shall EXPR be tracked? */ static bool @@ -5137,7 +5100,7 @@ track_expr_p (tree expr, bool need_rtl) char **_dl_argv; */ if (decl_rtl && MEM_P (decl_rtl) - && contains_symbol_ref (XEXP (decl_rtl, 0))) + && contains_symbol_ref_p (XEXP (decl_rtl, 0))) return 0; /* If RTX is a memory it should not be very large (because it would be |