Hi, I've noticed that on e.g. SH2 and SH2A it seems to be better to set the branch cost = 2, as it is done for the SH4 variants. This results in overall slightly smaller code (according to CSiBE) and better utilization of the various T bit patterns.
Tested on rev 210305 with make -k check RUNTESTFLAGS="--target_board=sh-sim \{-m2/-ml,-m2/-mb,-m2a/-mb,-m4/-ml,-m4/-mb,-m4a/-ml,-m4a/-mb}" and no new failures. Committed as rev 210534. Cheers, Oleg gcc/ChangeLog: * config/sh/sh.c (sh_option_override): Set branch cost to 2 for all target variants.
Index: gcc/config/sh/sh.c =================================================================== --- gcc/config/sh/sh.c (revision 210301) +++ gcc/config/sh/sh.c (working copy) @@ -904,15 +904,16 @@ sh_divsi3_libfunc = "__sdivsi3_1"; else sh_divsi3_libfunc = "__sdivsi3"; + if (sh_branch_cost == -1) { - sh_branch_cost = 1; - /* The SH1 does not have delay slots, hence we get a pipeline stall at every branch. The SH4 is superscalar, so the single delay slot - is not sufficient to keep both pipelines filled. */ - if (! TARGET_SH2 || TARGET_HARD_SH4) - sh_branch_cost = 2; + is not sufficient to keep both pipelines filled. + In any case, set the default branch cost to '2', as it results in + slightly overall smaller code and also enables some if conversions + that are required for matching special T bit related insns. */ + sh_branch_cost = 2; } /* Set -mzdcbranch for SH4 / SH4A if not otherwise specified by the user. */