[llvm-dev] Simulation of load-store forwarding with MI scheduler on AArch64
Andrew Trick via llvm-dev
llvm-dev at lists.llvm.org
Mon Sep 14 11:51:36 PDT 2020
> On Sep 14, 2020, at 9:40 AM, Evgeny Leviant via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>
> Hi list,
>
> Is it possible to simulate load to store forwarding on aarch64 with MI scheduling model on AArch64?
> For instance $x0 data latency in the example below should be 1 cycle
>
> ldr $x0, [$x1]
> str $x0, [$x2]
>
> But it should be 4 cycles if we have another instruction:
>
> ldr $x0, [$x1]
> add $x0, $x0, 4
>
> For ALU instructions it’s possible to use either ReadAdvance or SchedReadAdvance, but I don’t see how
> to do this with WriteLD or WriteST. Is there some workaround?
The main purpose of ReadAdvance is pipeline forwarding.
I think you can just want a read resource in your subtarget like this:
def ReadAdr : SchedReadAdvance<3, [WriteLD]>
Briefly glancing at the AArch64 target I see this for stores:
Sched<[WriteST]>;
So it doesn't look like there's any existing name for the store’s address operand. You could add a general ReadAdr SchedRead resource
in AArch64Schedule.td. Then you would need to change the ReadAdr line in your subtarget to an override:
def : ReadAdvance<ReadAdr, 3, [WriteLD]>
Or instead you can just add a rule in your subtarget listing the opcodes or using a regex, and using the ReadAdr resource that you defined in the same file.
def : InstRW<[WriteST, ReadAdr], (instregex "ST(someregex)$")>;
Being careful about store-pair and vector stores.
Then you always want to debug your target’s llvm-tblgen command by adding a flag
-debug-only=subtarget-emitter
And even trace the schedule for some simple cases with -debug-only=machine-scheduler
I haven't actually done any of this in several years, someone with more recent experience may have better tips.
-Andy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200914/ca074ef0/attachment-0001.html>
More information about the llvm-dev
mailing list