> Now you don't need to have a special pool to call create_TOC_reference, you
> can call it for regular TOC references as well, as done a few lines above:
>
> /* If this is a SYMBOL_REF that refers to a constant pool entry,
> and we have put it in the TOC, we just need to make a TOC-relative
> reference to it. */
> if (TARGET_TOC
> && GET_CODE (operands[1]) == SYMBOL_REF
> && use_toc_relative_ref (operands[1], mode))
> operands[1] = create_TOC_reference (operands[1], operands[0]);
>
> So the attached patch does it there too.
>
> Tested on PowerPC64/Linux (LRA) and VxWorks (reload), OK for the mainline?
Revised version attached, with Pmode formally changed to mode (but mode ==
Pmode here so no functional change whatsoever).
Tested on PowerPC64/Linux, OK for the mainline?
* config/rs6000/rs6000.c (rs6000_emit_move): Also use a TOC reference
after forcing to constant memory when the code model is medium.
--
Eric Botcazou
Index: config/rs6000/rs6000.c
===================================================================
--- config/rs6000/rs6000.c (revision 241856)
+++ config/rs6000/rs6000.c (working copy)
@@ -10673,10 +10673,7 @@ rs6000_emit_move (rtx dest, rtx source,
if (TARGET_TOC
&& GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
- && constant_pool_expr_p (XEXP (operands[1], 0))
- && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (
- get_pool_constant (XEXP (operands[1], 0)),
- get_pool_mode (XEXP (operands[1], 0))))
+ && use_toc_relative_ref (XEXP (operands[1], 0), mode))
{
rtx tocref = create_TOC_reference (XEXP (operands[1], 0),
operands[0]);