On Tue, Oct 18, 2016 at 01:09:24PM +0200, Eric Botcazou wrote: > > > No, "mode" is the mode of the MEM, not that of the SYMBOL_REF. > > > > I still don't see it, could you explain a bit more? > > MODE is the mode of operands[1] before: > > operands[1] = force_const_mem (mode, operands[1]); > > and after. But the test is on the address of the MEM, not on the MEM itself: > > if (TARGET_TOC > && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF > && use_toc_relative_ref (XEXP (operands[1], 0), Pmode)) > > because it's the mode of SYMBOL_REF we are interesting in (and > force_const_mem > guarantees that it's Pmode).
We need to pass the mode of the actual datum we would put in the TOC to the use_toc_relative_ref function, not the mode of its address. I must be missing something... Segher