diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/alias.c | 4 | ||||
-rw-r--r-- | gcc/var-tracking.c | 5 |
3 files changed, 10 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 730c79f..4295528 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-12-13 Alexandre Oliva <aoliva@redhat.com> + + PR debug/67355 + * var-tracking.c (reverse_op): Don't add dummy zero to reverse + ops that simplify back to the original value. + * alias.c (refs_newer_value_p): Cut off recursion for + expressions containing the original value. + 2015-12-13 Kazu Kirata <kazu@gcc.gnu.org> * config/m68k/m68k.md (load feeding clear byte): New peephole2. diff --git a/gcc/alias.c b/gcc/alias.c index 095b2ad..1ab9600 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -2129,7 +2129,7 @@ base_alias_check (rtx x, rtx x_base, rtx y, rtx y_base, } /* Return TRUE if EXPR refers to a VALUE whose uid is greater than - that of V. */ + (or equal to) that of V. */ static bool refs_newer_value_p (const_rtx expr, rtx v) @@ -2137,7 +2137,7 @@ refs_newer_value_p (const_rtx expr, rtx v) int minuid = CSELIB_VAL_PTR (v)->uid; subrtx_iterator::array_type array; FOR_EACH_SUBRTX (iter, array, expr, NONCONST) - if (GET_CODE (*iter) == VALUE && CSELIB_VAL_PTR (*iter)->uid > minuid) + if (GET_CODE (*iter) == VALUE && CSELIB_VAL_PTR (*iter)->uid >= minuid) return true; return false; } diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 9185bfd..07eea84 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -5774,11 +5774,6 @@ reverse_op (rtx val, const_rtx expr, rtx_insn *insn) return; } ret = simplify_gen_binary (code, GET_MODE (val), val, arg); - if (ret == val) - /* Ensure ret isn't VALUE itself (which can happen e.g. for - (plus (reg1) (reg2)) when reg2 is known to be 0), as that - breaks a lot of routines during var-tracking. */ - ret = gen_rtx_fmt_ee (PLUS, GET_MODE (val), val, const0_rtx); break; default: gcc_unreachable (); |