On Tue, May 1, 2012 at 12:17 AM, Alan Modra <amo...@gmail.com> wrote:
> * config/rs6000/predicates.md (input_operand): Don't match > constant pool addresses. Remove label_ref, high and plus from > match_code list. Remove redundant CONSTANT_P test. > (splat_input_operand): Similarly update match_code list. > (small_toc_ref): New predicate. > * config/rs6000/rs6000-protos.h (toc_relative_expr_p): Update > prototype. > * config/rs6000/rs6000.c (tocrel_base, tocrel_offset): Make const. > (legitimate_constant_pool_address_p): Move TARGET_TOC test and > register checks to.. > (toc_relative_expr_p): ..here. Add "strict" param. Match new rtl > generated by create_TOC_reference. > (rs6000_legitimize_address): Update cerate_TOC_reference call. > (rs6000_delegitimize_address): Handle new rtl for toc refs. > (rs6000_cannot_force_const_mem, rs6000_find_base_term): Likewise. > (use_toc_relative_ref): New function, split out from.. > (rs6000_emit_move): ..here. Remove redundant tests. Update > create_TOC_reference calls. > (rs6000_legitimize_reload_address): Formatting. Handle splitting > of medium/large model toc addresses. Use use_toc_relative_ref. > (print_operand): Formatting, style. Adjust for toc changes. > (print_operand_address): Likewise. > (rs6000_output_addr_const_extra): Likewise. > (create_TOC_reference): Put TOC_REGISTER in UNSPEC_TOCREL rather > than a PLUS. Use this formulation for both high and low part > of -mcmodel=medium/large toc reference too. Before reload, > always use the small model formulation. > * config/rs6000/rs6000.md (tls_gd, tls_gd_high): Similarly avoid > a PLUS in high part of addresses here. > (tls_ld, tls_ld_high, tls_got_dtprel, tls_got_dtprel_high): Likewise. > (tls_got_tprel, tls_got_tprel_high, largetoc_high): Likewise. > (largetoc_high, largetoc_low): Move earlier. Cope when no > base reg available. > (largetoc_high_plus): New insn. > (movsi_internal1, movsi_internal1_single, movsf_softfloat, > movdi_mfpgpr, movdi_internal64): Don't handle 'R' constraint here.. > (tocref): ..instead do so here, new insn and split. Okay. But please add a comment explaining toc_relative_expr_p(), especially the meaning of the new strict argument. And please wait for bootstrap to be unbroken on PPC64. Thanks, David