aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/alias.c4
-rw-r--r--gcc/var-tracking.c5
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 ();