On Wed, Jul 10, 2019 at 05:17:48PM -0400, Michael Meissner wrote: > +extern alias_set_type get_pc_relative_alias_set (void);
I'd just call it "pcrel", not "pc_relative", just like everywhere else? > @@ -7785,7 +7787,7 @@ bool > toc_relative_expr_p (const_rtx op, bool strict, const_rtx *tocrel_base_ret, > const_rtx *tocrel_offset_ret) > { > - if (!TARGET_TOC) > + if (!TARGET_TOC || TARGET_PCREL) Maybe (TARGET_TOC && !TARGET_PCREL) should get a name of its own? Or maybe TARGET_TOC should not be enabled when TARGET_PCREL is? It doesn't make much sense at all to have both enabled, does it? > + /* If this is a SYMBOL_REF that we refer to via pc-relative addressing, > + we don't have to do any special for it. */ > + else if (TARGET_PCREL && SYMBOL_REF_P (operands[1]) > + && TARGET_CMODEL == CMODEL_MEDIUM > + && SYMBOL_REF_LOCAL_P (operands[1])) else if (TARGET_PCREL && TARGET_CMODEL == CMODEL_MEDIUM && SYMBOL_REF_P (operands[1]) && SYMBOL_REF_LOCAL_P (operands[1])) > @@ -9928,6 +9938,11 @@ rs6000_emit_move (rtx dest, rtx source, > operands[1] = gen_const_mem (mode, tocref); > set_mem_alias_set (operands[1], get_TOC_alias_set ()); > } > + > + else if (TARGET_PCREL && SYMBOL_REF_P (XEXP (operands[1], 0)) > + && TARGET_CMODEL == CMODEL_MEDIUM > + && SYMBOL_REF_LOCAL_P (XEXP (operands[1], 0))) > + set_mem_alias_set (operands[1], get_pc_relative_alias_set ()); Similar. > alias_set_type > get_TOC_alias_set (void) > { > - if (set == -1) > - set = new_alias_set (); > - return set; > + if (TOC_alias_set == -1) > + TOC_alias_set = new_alias_set (); > + return TOC_alias_set; > +} It would be nice if you could initialise the alias sets some other way. Not new code, but you duplicate it ;-) > +alias_set_type > +get_pc_relative_alias_set (void) > +{ > + if (pc_relative_alias_set == -1) > + pc_relative_alias_set = new_alias_set (); > + return pc_relative_alias_set; > } Rest looks fine. Segher