[llvm] [AArch64] Initial sched model for Neoverse N3 (PR #106371)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 4 01:31:09 PDT 2024
davemgreen wrote:
> I have no N3 machine. I just "translate" the N3 SWOG into a sched model.
OK. I will see if I can try and run something to give it a quick check.
One extra thing, this definition says "take one N3UnitL and hold it for 6 cycles and one N3UnitV is held for 4 cycles".
```
def N3Write_8c_6L_4V : SchedWriteRes<[N3UnitL, N3UnitV]> {
let Latency = 8;
let NumMicroOps = 10;
let ReleaseAtCycles = [6, 4];
}
```
If the operation is split down into micro-operations then they should be separate uops that can be executed independantly. So this version for example says "there are 4 L ops and 8 v ops that can execute in any unit as needed".
```
def V2Write_9cyc_4L_8V : SchedWriteRes<[V2UnitL, V2UnitL, V2UnitL,
V2UnitL, V2UnitV, V2UnitV,
V2UnitV, V2UnitV, V2UnitV,
V2UnitV, V2UnitV, V2UnitV]> {
let Latency = 9;
let NumMicroOps = 12;
}
```
The dependency between the L and V ops is not well described in tablegen scheduling models, but it should lead to better analysis in general. Things like divide (and in older models sqrt) generally use ReleaseAtCycles, others operations should ideally split them out.
https://github.com/llvm/llvm-project/pull/106371
More information about the llvm-commits
mailing list