mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-07 12:30:44 +00:00
[X86][Haswell][SchedModel] Add architecture specific scheduling models.
Group: Integer MMX and XMM instructions. Sub-group: Arithmetic instructions. <rdar://problem/15607571> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215915 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
84cab94cbb
commit
1cb132f921
@ -1442,4 +1442,67 @@ def WriteVPGATHERQQ256 : SchedWriteRes<[]> {
|
||||
}
|
||||
def : InstRW<[WriteVPGATHERQQ256, ReadAfterLd], (instregex "VPGATHERQQYrm")>;
|
||||
|
||||
//-- Arithmetic instructions --//
|
||||
|
||||
// PHADD|PHSUB (S) W/D.
|
||||
// v <- v,v.
|
||||
def WritePHADDSUBr : SchedWriteRes<[HWPort1, HWPort5]> {
|
||||
let Latency = 3;
|
||||
let NumMicroOps = 3;
|
||||
let ResourceCycles = [1, 2];
|
||||
}
|
||||
def : InstRW<[WritePHADDSUBr], (instregex "MMX_PHADD(W?)rr64",
|
||||
"MMX_PHADDSWrr64",
|
||||
"MMX_PHSUB(W|D)rr64",
|
||||
"MMX_PHSUBSWrr64",
|
||||
"(V?)PH(ADD|SUB)(W|D)(Y?)rr",
|
||||
"(V?)PH(ADD|SUB)SWrr(256)?")>;
|
||||
|
||||
// v <- v,m.
|
||||
def WritePHADDSUBm : SchedWriteRes<[HWPort1, HWPort5, HWPort23]> {
|
||||
let Latency = 6;
|
||||
let NumMicroOps = 3;
|
||||
let ResourceCycles = [1, 2, 1];
|
||||
}
|
||||
def : InstRW<[WritePHADDSUBm, ReadAfterLd],
|
||||
(instregex "MMX_PHADD(W?)rm64",
|
||||
"MMX_PHADDSWrm64",
|
||||
"MMX_PHSUB(W|D)rm64",
|
||||
"MMX_PHSUBSWrm64",
|
||||
"(V?)PH(ADD|SUB)(W|D)(Y?)rm",
|
||||
"(V?)PH(ADD|SUB)SWrm(128|256)?")>;
|
||||
|
||||
// PCMPGTQ.
|
||||
// v <- v,v.
|
||||
def WritePCMPGTQr : SchedWriteRes<[HWPort0]> {
|
||||
let Latency = 5;
|
||||
let NumMicroOps = 1;
|
||||
}
|
||||
def : InstRW<[WritePCMPGTQr], (instregex "(V?)PCMPGTQ(Y?)rr")>;
|
||||
|
||||
// v <- v,m.
|
||||
def WritePCMPGTQm : SchedWriteRes<[HWPort0, HWPort23]> {
|
||||
let Latency = 5;
|
||||
let NumMicroOps = 2;
|
||||
let ResourceCycles = [1, 1];
|
||||
}
|
||||
def : InstRW<[WritePCMPGTQm, ReadAfterLd], (instregex "(V?)PCMPGTQ(Y?)rm")>;
|
||||
|
||||
// PMULLD.
|
||||
// x,x / y,y,y.
|
||||
def WritePMULLDr : SchedWriteRes<[HWPort0]> {
|
||||
let Latency = 10;
|
||||
let NumMicroOps = 2;
|
||||
let ResourceCycles = [2];
|
||||
}
|
||||
def : InstRW<[WritePMULLDr], (instregex "(V?)PMULLD(Y?)rr")>;
|
||||
|
||||
// x,m / y,y,m.
|
||||
def WritePMULLDm : SchedWriteRes<[HWPort0, HWPort23]> {
|
||||
let Latency = 10;
|
||||
let NumMicroOps = 3;
|
||||
let ResourceCycles = [2, 1];
|
||||
}
|
||||
def : InstRW<[WritePMULLDm, ReadAfterLd], (instregex "(V?)PMULLD(Y?)rm")>;
|
||||
|
||||
} // SchedModel
|
||||
|
Loading…
Reference in New Issue
Block a user