Hi, The fldi_ok function in sh.c has been returning 'true' for while. Thus it can as well be removed. Tested with 'make all-gcc', committed as r216320.
Cheers, Oleg gcc/ChangeLog: * config/sh/sh-protos.h (fldi_ok): Remove. * config/sh/sh.c (fldi_ok): Likewise. (sh_secondary_reload): Don't use fldi_ok. * config/sh/constraints.md (G constraint, H constraint): Don't use fldi_ok.
Index: gcc/config/sh/sh-protos.h =================================================================== --- gcc/config/sh/sh-protos.h (revision 216316) +++ gcc/config/sh/sh-protos.h (working copy) @@ -191,7 +191,6 @@ extern void sh_expand_epilogue (bool); extern void sh_set_return_address (rtx, rtx); extern int initial_elimination_offset (int, int); -extern bool fldi_ok (void); extern bool sh_hard_regno_rename_ok (unsigned int, unsigned int); extern bool sh_cfun_interrupt_handler_p (void); extern bool sh_cfun_resbank_handler_p (void); Index: gcc/config/sh/constraints.md =================================================================== --- gcc/config/sh/constraints.md (revision 216316) +++ gcc/config/sh/constraints.md (working copy) @@ -210,12 +210,12 @@ (define_constraint "G" "Double constant 0." (and (match_code "const_double") - (match_test "fp_zero_operand (op) && fldi_ok ()"))) + (match_test "fp_zero_operand (op)"))) (define_constraint "H" "Double constant 1." (and (match_code "const_double") - (match_test "fp_one_operand (op) && fldi_ok ()"))) + (match_test "fp_one_operand (op)"))) ;; Extra constraints (define_constraint "Q" Index: gcc/config/sh/sh.c =================================================================== --- gcc/config/sh/sh.c (revision 216316) +++ gcc/config/sh/sh.c (working copy) @@ -9875,19 +9875,6 @@ return REAL_VALUES_EQUAL (r, dconst1); } -/* In general mode switching is used. If we are - compiling without -mfmovd, movsf_ie isn't taken into account for - mode switching. We could check in machine_dependent_reorg for - cases where we know we are in single precision mode, but there is - interface to find that out during reload, so we must avoid - choosing an fldi alternative during reload and thus failing to - allocate a scratch register for the constant loading. */ -bool -fldi_ok (void) -{ - return true; -} - /* Return the TLS type for TLS symbols. */ enum tls_model tls_symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) @@ -13106,8 +13093,7 @@ if (REGCLASS_HAS_FP_REG (rclass) && ! TARGET_SHMEDIA && immediate_operand ((x), mode) - && ! ((fp_zero_operand (x) || fp_one_operand (x)) - && mode == SFmode && fldi_ok ())) + && ! ((fp_zero_operand (x) || fp_one_operand (x)) && mode == SFmode)) switch (mode) { case SFmode: