On Mon, Jan 23, 2012 at 07:29:18PM +0100, Jakub Jelinek wrote:
> can hit it in some cases.  The problem here is that var-tracking.c
> (adjust_insn) isn't able to delegitimize it, because the UNSPEC_TOCREL
> isn't added there to r2 register, but to a debug_expr (which only afterwards
> is found to contain r2 value).

Why don't we relax operand checks in rs6000_delegitimize_address?
http://gcc.gnu.org/ml/gcc-patches/2011-09/msg00304.html did that as
part of changing toc references.  For mainline you'd just get rid of

-         && ((GET_CODE (XEXP (x, 0)) == REG
-              && (REGNO (XEXP (x, 0)) == TOC_REGISTER
-                  || TARGET_MINIMAL_TOC
-                  || TARGET_CMODEL != CMODEL_SMALL))
-             || (TARGET_CMODEL != CMODEL_SMALL
-                 && GET_CODE (XEXP (x, 0)) == CONST
-                 && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS
-                 && GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == REG
-                 && REGNO (XEXP (XEXP (XEXP (x, 0), 0), 0)) == TOC_REGISTER
-                 && GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 1)) == HIGH
-                 && rtx_equal_p (XEXP (x, 1),
-                                 XEXP (XEXP (XEXP (XEXP (x, 0), 0), 1), 0)))))


-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to