On Wed, 28 May 2014, Kyrill Tkachov wrote:
> Hi all, > > The documentation for TARGET_MACRO_FUSION_PAIR says that it can be used to > tell the scheduler that two insns should not be scheduled apart. It doesn't > specify what kinds of insns those can be. > > Yet from what I can see in sched-deps.c it can only be used on compares and > conditional branches, as implemented in i386. Please note that it's not only restricted to conditional branches, but also to keeping the instructions together if they were consecutive in the first place (i.e. it does not try to move a compare insn closer to the branch). Doing it that way allowed to solve the issue at hand at that time without a separate scan of the whole RTL instruction stream. > Say I want to specify two other types of instruction that I want to force > together, would it be worth generalising the TARGET_MACRO_FUSION_PAIR usage > to achieve that? I'd say yes, but that would be the least of the problems; the more important question is how to trigger the hook (you probably want to integrate it into the existing scheduler dependencies evaluation loop rather than adding a new loop just to discover macro-fusable pairs). You'll also have to invent something new if you want to move non-consecutive fusable insns together if they are apart. HTH. Alexander