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