[backport from gcc-4.7.3 r193867, without the indentation changes ] gcc/ 2012-11-27 Paolo Bonzini PR rtl-optimization/55489 * gcse.c (compute_transp): Precompute a canonical version of XEXP (x, 0), and pass it to canon_true_dependence. --- gcc-4.6.3/gcc/gcse.c.~1~ 2011-02-03 07:04:04.000000000 +0100 +++ gcc-4.6.3/gcc/gcse.c 2012-12-02 18:05:59.000000000 +0100 @@ -2144,6 +2144,10 @@ compute_transp (const_rtx x, int indx, s { bitmap_iterator bi; unsigned bb_index; + rtx x_addr; + + x_addr = get_addr (XEXP (x, 0)); + x_addr = canon_rtx (x_addr); /* First handle all the blocks with calls. We don't need to do any list walking for them. */ @@ -2175,7 +2179,7 @@ compute_transp (const_rtx x, int indx, s dest_addr = XEXP (list_entry, 0); if (canon_true_dependence (dest, GET_MODE (dest), dest_addr, - x, NULL_RTX, rtx_addr_varies_p)) + x, x_addr, rtx_addr_varies_p)) { if (set_p) SET_BIT (bmap[bb_index], indx);