On 05/19/14 00:38, Bin.Cheng wrote:
1) Should we do it in a separated pass, or just along with scheduler?
ISTM that when we're able to combine insns that can impact the schedule
we'd like to generate, possibly in significant ways. That argues for a
separate pass that runs before the scheduler.
So I'd probably look at splitting out the code which builds the
dependency information, running that first, then the pass to merge these
memory ops (incrementally updating the dependency info), then the scheduler.
2) When should we run the new pass, before or after RA? There are
both advantages and disadvantages and very depends on the target for
which we are compiling.
I have no simple answer to this. Maybe we can run the pass twice or
follow Oleg's suggestion. I think it's a new strategy for GCC to let
backend decide when to run a pass.
If we only run the dependency stuff once and share the data between the
new pass and the sceduler, then I think running the new pass twice just
before scheduling would be fine.
3) Do we need a new target hook interface?
I answered this in other messages and I still think it's target dependent.
Still pondering that one :-)
4) The optimization should be able to handle cases with more than 2
consecutive load/store instructions.
The current implementation can't handle such cases and need further extension.
Yea, probably. I think if we build the infrastructure right extension
for > 2 load/stores shouldn't be terribly bad to implement.
Jeff