On Sat, Aug 25, 2012 at 7:22 PM, Hans-Peter Nilsson <hp@bitrange.com> wrote:
v2 patch differences:
- moves hook description text to target.def
- fixes error path to clear clobbers, as expected by recog_for_combine callers
2012-08-25 Uros Bizjak <ubizjak@gmail.com>
* target.def (reject_combined_insn): New target hook.
* doc/tm.texi.in (TARGET_REJECT_COMBINED_INSN): New hook.
* doc/tm.texi: Regenerated.
* combine.c (recog_for_combine): Call targetm.reject_combined_insn
to allow targets to reject combined insn.
Maybe mention that the default is to allow all combinations for
which a pattern match? And that the reason to disallow them can
be that they're known to result in suboptimal code? Or other
reasons.
Something like this perhaps:
/* Returns true if the combined insn should be rejected
for some reason. */
DEFHOOK
(reject_combined_insn,
"Take an instruction in @var{insn} and return @code{true} if the instruction\
should be rejected as a combination of two or more instructions. The\
default is to accept all instructions.",
bool, (rtx insn),
hook_bool_rtx_false)
I don't think it should be mentioned that it can be used to stop
invalid code to be generated; that'd just be encouraging
covering up bugs in reload. (Using it to simplify the port may
be valid.)
Please note that there is no mention of the specific purpose of this
hook. x86 uses it to counter a specific reload problem, but this is
just hook _implementation_ detail.