+2012-09-14 Wei Guozhi <carrot@google.com>
+
+ Backport from 2012-02-13 mainline r184169.
+
+ * cselib.c (expand_loc): Return sp, fp, hfp or cfa base reg right
+ away if seen.
+
2012-09-10 Georg-Johann Lay <avr@gjlay.de>
Backport from 2012-09-10 mainline r191132.
unsigned int regno = UINT_MAX;
struct elt_loc_list *p_in = p;
- for (; p; p = p -> next)
+ for (; p; p = p->next)
{
+ /* Return these right away to avoid returning stack pointer based
+ expressions for frame pointer and vice versa, which is something
+ that would confuse DSE. See the comment in cselib_expand_value_rtx_1
+ for more details. */
+ if (REG_P (p->loc)
+ && (REGNO (p->loc) == STACK_POINTER_REGNUM
+ || REGNO (p->loc) == FRAME_POINTER_REGNUM
+ || REGNO (p->loc) == HARD_FRAME_POINTER_REGNUM
+ || REGNO (p->loc) == cfa_base_preserved_regno))
+ return p->loc;
/* Avoid infinite recursion trying to expand a reg into a
the same reg. */
if ((REG_P (p->loc))