]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/ChangeLog
Turn HARD_REGNO_MODE_OK into a target hook
[thirdparty/gcc.git] / gcc / ChangeLog
index 1c5100173ee5137f5e3f23d88797445da72880a9..b0f5212665d39abaf5c6408b629d74dcf5fcb9ee 100644 (file)
@@ -1,3 +1,279 @@
+2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * target.def (hard_regno_mode_ok): New hook.
+       * doc/tm.texi (HARD_REGNO_MODE_OK): Replace with...
+       (TARGET_HARD_REGNO_MODE_OK): ...this.
+       * doc/tm.texi.in: Regenerate.
+       * hooks.h (hook_bool_uint_mode_true): Declare.
+       * hooks.c (hook_bool_uint_mode_true): New function.
+       * doc/md.texi: Refer to targetm.hard_regno_mode_ok instead of
+       HARD_REGNO_MODE_OK.
+       * genpreds.c (write_insn_preds_c): Add an include of target.h.
+       * alias.c (init_alias_target): Use targetm.hard_regno_mode_ok
+       instead of HARD_REGNO_MODE_OK.
+       * caller-save.c: Include target.h.
+       (reg_save_code): Use targetm.hard_regno_mode_ok instead of
+       HARD_REGNO_MODE_OK.
+       * combine.c (can_combine_p): Likewise.
+       (combinable_i3pat): Likewise.
+       (can_change_dest_mode): Likewise.
+       * expr.c (init_expr_target): Likewise.
+       (convert_move): Likewise.
+       (convert_modes): Likewise.
+       * ira.c (setup_prohibited_class_mode_regs): Likewise.
+       (setup_prohibited_mode_move_regs): Likewise.
+       * ira.h (target_ira): Likewise.
+       * lra-assigns.c (find_hard_regno_for_1): Likewise.
+       * lra-constraints.c (process_alt_operands): Likewise.
+       (split_reg): Likewise.
+       * recog.c (peep2_find_free_register): Likewise.
+       * ree.c (combine_reaching_defs): Likewise.
+       * regcprop.c (maybe_mode_change): Likewise.
+       * reginfo.c (init_reg_sets_1): Likewise.
+       (choose_hard_reg_mode): Likewise.
+       (simplifiable_subregs): Likewise.
+       * regrename.c (check_new_reg_p): Likewise.
+       * reload.c (find_valid_class): Likewise.
+       (find_valid_class_1): Likewise.
+       (reload_inner_reg_of_subreg): Likewise.
+       (push_reload): Likewise.
+       (combine_reloads): Likewise.
+       (find_dummy_reload): Likewise.
+       (find_reloads): Likewise.
+       * reload1.c (find_reg): Likewise.
+       (set_reload_reg): Likewise.
+       (allocate_reload_reg): Likewise.
+       (choose_reload_regs): Likewise.
+       (reload_adjust_reg_for_temp): Likewise.
+       * rtlanal.c (subreg_size_offset_from_lsb): Likewise.
+       (simplify_subreg_regno): Likewise.
+       * sel-sched.c (init_regs_for_mode): Likewise.
+       * varasm.c (make_decl_rtl): Likewise.
+       * config/aarch64/aarch64.h (HARD_REGNO_MODE_OK): Delete.
+       (MODES_TIEABLE_P): Use targetm.hard_regno_mode_ok instead of
+       HARD_REGNO_MODE_OK.
+       * config/aarch64/aarch64-protos.h (aarch64_hard_regno_mode_ok): Delete.
+       * config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Make static.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/alpha/alpha.h (HARD_REGNO_MODE_OK): Delete.
+       * config/alpha/alpha.c (alpha_hard_regno_mode_ok): New function.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/arc/arc.h (arc_hard_regno_mode_ok): Delete.
+       (arc_mode_class): Delete.
+       (HARD_REGNO_MODE_OK): Delete.
+       * config/arc/arc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (arc_hard_regno_mode_ok): Rename old array to...
+       (arc_hard_regno_mode_ok_modes): ...this.
+       (arc_conditional_register_usage): Update accordingly.
+       (arc_mode_class): Make static.
+       (arc_hard_regno_mode_ok): New function.
+       * config/arm/arm.h (HARD_REGNO_MODE_OK): Delete.
+       * config/arm/arm-protos.h (arm_hard_regno_mode_ok): Delete.
+       * config/arm/arm.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (arm_hard_regno_mode_ok): Make static.
+       * config/arm/arm.md (movdi): Use targetm.hard_regno_mode_ok instead of
+       HARD_REGNO_MODE_OK.
+       * config/avr/avr-protos.h (avr_hard_regno_mode_ok): Delete.
+       * config/avr/avr.h (HARD_REGNO_MODE_OK): Delete.
+       * config/avr/avr.c (avr_hard_regno_mode_ok): Make static and
+       return a bool.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/bfin/bfin-protos.h (hard_regno_mode_ok): Delete.
+       * config/bfin/bfin.h (HARD_REGNO_MODE_OK): Delete.
+       * config/bfin/bfin.c (hard_regno_mode_ok): Rename to...
+       (bfin_hard_regno_mode_ok): ...this.  Make static and return a bool.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/bfin/predicates.md (valid_reg_operand): Use
+       targetm.hard_regno_mode_ok instead of HARD_REGNO_MODE_OK.
+       * config/c6x/c6x.h (HARD_REGNO_MODE_OK): Delete.
+       * config/c6x/c6x.c (c6x_hard_regno_mode_ok): New function.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/cr16/cr16.h (HARD_REGNO_MODE_OK): Delete.
+       * config/cr16/cr16-protos.h (cr16_hard_regno_mode_ok): Delete.
+       * config/cr16/cr16.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (cr16_hard_regno_mode_ok): Make static and return a bool.
+       * config/cris/cris.h (HARD_REGNO_MODE_OK): Delete.
+       * config/cris/cris.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (cris_hard_regno_mode_ok): New function.
+       * config/epiphany/epiphany.h (epiphany_hard_regno_mode_ok): Delete.
+       (epiphany_mode_class): Delete.
+       (HARD_REGNO_MODE_OK): Delete.
+       * config/epiphany/epiphany-protos.h (hard_regno_mode_ok): Delete.
+       * config/epiphany/epiphany.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (hard_regno_mode_ok): Rename to...
+       (epiphany_hard_regno_mode_ok): ...this.  Make static and return a bool.
+       * config/fr30/fr30.h (HARD_REGNO_MODE_OK): Delete.
+       * config/fr30/fr30.md: Refer to targetm.hard_regno_mode_ok instead of
+       HARD_REGNO_MODE_OK.
+       * config/frv/frv.h (HARD_REGNO_MODE_OK): Delete.
+       * config/frv/frv-protos.h (frv_hard_regno_mode_ok): Delete.
+       * config/frv/frv.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (frv_hard_regno_mode_ok): Make static and return a bool.
+       * config/frv/frv.md: Refer to targetm.hard_regno_mode_ok instead of
+       HARD_REGNO_MODE_OK.
+       * config/ft32/ft32.h (HARD_REGNO_MODE_OK): Delete.
+       * config/h8300/h8300.h (HARD_REGNO_MODE_OK): Delete.
+       * config/h8300/h8300-protos.h (h8300_hard_regno_mode_ok): Delete.
+       * config/h8300/h8300.c (h8300_hard_regno_mode_ok): Make static
+       and return a bool.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/i386/i386.h (HARD_REGNO_MODE_OK): Delete.
+       * config/i386/i386-protos.h (ix86_hard_regno_mode_ok): Delete.
+       * config/i386/i386.c (ix86_hard_regno_mode_ok): Make static and
+       return a bool.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/ia64/ia64.h (HARD_REGNO_MODE_OK): Delete.
+       * config/ia64/ia64.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (ia64_hard_regno_mode_ok): New function.
+       * config/iq2000/iq2000.h (HARD_REGNO_MODE_OK): Delete.
+       * config/iq2000/iq2000.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (iq2000_hard_regno_mode_ok): New function.
+       * config/lm32/lm32.h (HARD_REGNO_MODE_OK): Delete.
+       * config/lm32/lm32.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (lm32_hard_regno_mode_ok): New function.
+       * config/m32c/m32c.h (HARD_REGNO_MODE_OK): Delete.
+       * config/m32c/m32c-protos.h (m32c_hard_regno_ok): Delete.
+       * config/m32c/m32c.c (class_can_hold_mode): Use m32c_hard_regno_mode_ok
+       instead of HARD_REGNO_MODE_OK.
+       (m32c_hard_regno_ok): Rename to...
+       (m32c_hard_regno_mode_ok): ...this.  Make static and return a bool.
+       (m32c_cannot_change_mode_class): Update accordingly.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/m32r/m32r.h (m32r_hard_regno_mode_ok): Delete.
+       (m32r_mode_class): Delete.
+       (HARD_REGNO_MODE_OK): Delete.
+       * config/m32r/m32r.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (m32r_hard_regno_mode_ok): Rename to...
+       (m32r_hard_regno_modes): ...this.
+       (m32r_mode_class): Make static.
+       (m32r_hard_regno_mode_ok): New function.
+       * config/m68k/m68k.h (HARD_REGNO_MODE_OK): Delete.
+       * config/m68k/m68k-protos.h (m68k_regno_mode_ok): Delete.
+       * config/m68k/m68k.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (m68k_hard_regno_mode_ok): Make static.
+       * config/mcore/mcore.h (HARD_REGNO_MODE_OK): Delete.
+       * config/mcore/mcore.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (mcore_hard_regno_mode_ok): New function.
+       * config/microblaze/microblaze.h (microblaze_hard_regno_mode_ok)
+       (HARD_REGNO_MODE_OK): Delete.
+       * config/microblaze/microblaze.c (microblaze_hard_regno_mode_ok):
+       Rename to...
+       (microblaze_hard_regno_mode_ok_p): ...this and make static.
+       (microblaze_hard_regno_mode_ok): New function.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/mips/mips.h (HARD_REGNO_MODE_OK): Delete.
+       (mips_hard_regno_mode_ok): Delete.
+       * config/mips/mips.c (mips_hard_regno_mode_ok): Rename to...
+       (mips_hard_regno_mode_ok_p): ...this and make static.
+       (mips_hard_regno_mode_ok_p): Rename to...
+       (mips_hard_regno_mode_ok_uncached): ...this.
+       (mips_hard_regno_mode_ok): New function.
+       (mips_class_max_nregs): Use mips_hard_regno_mode_ok instead
+       of HARD_REGNO_MODE_OK.
+       (mips_option_override): Update after above name changes.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/mmix/mmix.h (HARD_REGNO_MODE_OK): Delete.
+       * config/mn10300/mn10300.h (HARD_REGNO_MODE_OK): Delete.
+       * config/mn10300/mn10300-protos.h (mn10300_hard_regno_mode_ok): Delete.
+       * config/mn10300/mn10300.c (mn10300_hard_regno_mode_ok): Make static.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/moxie/moxie.h (HARD_REGNO_MODE_OK): Delete.
+       * config/msp430/msp430.h (HARD_REGNO_MODE_OK): Delete.
+       * config/msp430/msp430-protos.h (msp430_hard_regno_mode_ok): Delete.
+       * config/msp430/msp430.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (msp430_hard_regno_mode_ok): Make static and return a bool.
+       * config/nds32/nds32.h (HARD_REGNO_MODE_OK): Delete.
+       * config/nds32/nds32-protos.h (nds32_hard_regno_mode_ok): Delete.
+       * config/nds32/nds32.c (nds32_hard_regno_mode_ok): Make static
+       and return a bool.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/nios2/nios2.h (HARD_REGNO_MODE_OK): Delete.
+       * config/nvptx/nvptx.h (HARD_REGNO_MODE_OK): Delete.
+       * config/pa/pa.h (MODES_TIEABLE_P): Update commentary.
+       * config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): Rename to...
+       (PA_HARD_REGNO_MODE_OK): ...this
+       * config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Rename to...
+       (PA_HARD_REGNO_MODE_OK): ...this.
+       * config/pa/pa.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (pa_hard_regno_mode_ok): New function.
+       * config/pdp11/pdp11.h (HARD_REGNO_MODE_OK): Delete.
+       * config/pdp11/pdp11.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (pdp11_hard_regno_mode_ok): New function.
+       * config/powerpcspe/powerpcspe.h (HARD_REGNO_MODE_OK): Delete.
+       * config/powerpcspe/powerpcspe-protos.h (rs6000_hard_regno_mode_ok_p):
+       Delete.
+       * config/powerpcspe/powerpcspe.c (rs6000_hard_regno_mode_ok_p):
+       Make static.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (rs6000_hard_regno_mode_ok): Rename to...
+       (rs6000_hard_regno_mode_ok_uncached): ...this.
+       (rs6000_init_hard_regno_mode_ok): Update accordingly.
+       (rs6000_hard_regno_mode_ok): New function.
+       * config/riscv/riscv.h (HARD_REGNO_MODE_OK): Delete.
+       * config/riscv/riscv-protos.h (riscv_hard_regno_mode_ok_p): Delete.
+       * config/riscv/riscv.c (riscv_hard_regno_mode_ok_p): Rename to...
+       (riscv_hard_regno_mode_ok): ...this and make static.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/rl78/rl78.h (HARD_REGNO_MODE_OK): Delete.
+       * config/rl78/rl78-protos.h (rl78_hard_regno_mode_ok): Delete.
+       * config/rl78/rl78.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (rl78_hard_regno_mode_ok): Make static and return bool.
+       * config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Delete.
+       * config/rs6000/rs6000-protos.h (rs6000_hard_regno_mode_ok_p):
+       Delete.
+       * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok_p): Make static.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (rs6000_hard_regno_mode_ok): Rename to...
+       (rs6000_hard_regno_mode_ok_uncached): ...this.
+       (rs6000_init_hard_regno_mode_ok): Update accordingly.
+       (rs6000_hard_regno_mode_ok): New function.
+       * config/rx/rx.h (HARD_REGNO_MODE_OK): Delete.
+       * config/rx/rx.c (rx_hard_regno_mode_ok): New function.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/s390/s390.h (HARD_REGNO_MODE_OK): Delete.
+       * config/s390/s390-protos.h (s390_hard_regno_mode_ok): Delete.
+       * config/s390/s390.c (s390_hard_regno_mode_ok): Make static.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/sh/sh.h (HARD_REGNO_MODE_OK): Delete.
+       * config/sh/sh-protos.h (sh_hard_regno_mode_ok): Delete.
+       * config/sh/sh.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (sh_hard_regno_mode_ok): Make static.
+       * config/sparc/constraints.md: Refer to targetm.hard_regno_mode_ok
+       instead of HARD_REGNO_MODE_OK.
+       * config/sparc/sparc.h (hard_regno_mode_classes): Delete.
+       (sparc_mode_class): Delete.
+       (HARD_REGNO_MODE_OK): Delete.
+       * config/sparc/sparc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (hard_regno_mode_classes): Make static.
+       (sparc_mode_class): Likewise.
+       (sparc_hard_regno_mode_ok): New function.
+       * config/spu/spu.h (HARD_REGNO_MODE_OK): Delete.
+       * config/stormy16/stormy16.h (HARD_REGNO_MODE_OK): Delete.
+       * config/stormy16/stormy16.c (xstormy16_hard_regno_mode_ok): New
+       function.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/tilegx/tilegx.h (HARD_REGNO_MODE_OK): Delete.
+       * config/tilepro/tilepro.h (HARD_REGNO_MODE_OK): Delete.
+       * config/v850/v850.h (HARD_REGNO_MODE_OK): Delete.
+       * config/v850/v850.c (v850_hard_regno_mode_ok): New function.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       * config/vax/vax.h (HARD_REGNO_MODE_OK): Delete.
+       * config/visium/visium.h (HARD_REGNO_MODE_OK): Delete.
+       * config/visium/visium.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (visium_hard_regno_mode_ok): New function.
+       * config/visium/visium.md: Refer to targetm.hard_regno_mode_ok
+       instead of HARD_REGNO_MODE_OK.
+       * config/xtensa/xtensa.h (xtensa_hard_regno_mode_ok): Delete.
+       (HARD_REGNO_MODE_OK): Delete.
+       * config/xtensa/xtensa.c (xtensa_hard_regno_mode_ok): Rename to...
+       (xtensa_hard_regno_mode_ok_p): ...this and make static.
+       (xtensa_option_override): Update accordingly.
+       (TARGET_HARD_REGNO_MODE_OK): Redefine.
+       (xtensa_hard_regno_mode_ok): New function.
+       * system.h (HARD_REGNO_MODE_OK): Poison.
+
 2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>