diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-05-01 18:22:53 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-05-01 18:22:53 +0000 |
commit | 21caf0124f165707f71e7faaf275183008df90ee (patch) | |
tree | 3e8b8dea6a27ef4b26a5c6bb91723586c953ed29 /llvm/lib | |
parent | cd3fd82da3c1e780727c36fe1f4f9498ba888b99 (diff) | |
download | bcm5719-llvm-21caf0124f165707f71e7faaf275183008df90ee.tar.gz bcm5719-llvm-21caf0124f165707f71e7faaf275183008df90ee.zip |
[X86] Split WriteFMul/WriteFDiv into XMM and YMM/ZMM scheduler classes
llvm-svn: 331293
Diffstat (limited to 'llvm/lib')
-rwxr-xr-x | llvm/lib/Target/X86/X86SchedBroadwell.td | 16 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedHaswell.td | 16 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedSandyBridge.td | 34 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedSkylakeClient.td | 16 | ||||
-rwxr-xr-x | llvm/lib/Target/X86/X86SchedSkylakeServer.td | 38 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86Schedule.td | 6 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ScheduleAtom.td | 2 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ScheduleBtVer2.td | 30 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ScheduleSLM.td | 2 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ScheduleZnver1.td | 2 |
10 files changed, 73 insertions, 89 deletions
diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td index 50c2818d79e..f900d7980a7 100755 --- a/llvm/lib/Target/X86/X86SchedBroadwell.td +++ b/llvm/lib/Target/X86/X86SchedBroadwell.td @@ -154,13 +154,15 @@ def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; } def : WriteRes<WriteFStore, [BWPort237, BWPort4]>; def : WriteRes<WriteFMove, [BWPort5]>; -defm : BWWriteResPair<WriteFAdd, [BWPort1], 3, [1], 1, 5>; // Floating point add/sub. -defm : BWWriteResPair<WriteFAddY, [BWPort1], 3, [1], 1, 7>; // Floating point add/sub (YMM/ZMM). -defm : BWWriteResPair<WriteFCmp, [BWPort1], 3, [1], 1, 5>; // Floating point compare. -defm : BWWriteResPair<WriteFCmpY, [BWPort1], 3, [1], 1, 7>; // Floating point compare (YMM/ZMM). -defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags. -defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication. -defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division. +defm : BWWriteResPair<WriteFAdd, [BWPort1], 3, [1], 1, 5>; // Floating point add/sub. +defm : BWWriteResPair<WriteFAddY, [BWPort1], 3, [1], 1, 7>; // Floating point add/sub (YMM/ZMM). +defm : BWWriteResPair<WriteFCmp, [BWPort1], 3, [1], 1, 5>; // Floating point compare. +defm : BWWriteResPair<WriteFCmpY, [BWPort1], 3, [1], 1, 7>; // Floating point compare (YMM/ZMM). +defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags. +defm : BWWriteResPair<WriteFMul, [BWPort0], 5, [1], 1, 5>; // Floating point multiplication. +defm : BWWriteResPair<WriteFMulY, [BWPort0], 5, [1], 1, 7>; // Floating point multiplication (YMM/ZMM). +defm : BWWriteResPair<WriteFDiv, [BWPort0], 12, [1], 1, 5>; // 10-14 cycles. // Floating point division. +defm : BWWriteResPair<WriteFDivY, [BWPort0], 12, [1], 1, 7>; // 10-14 cycles. // Floating point division (YMM/ZMM). defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15, [1], 1, 5>; // Floating point square root. defm : BWWriteResPair<WriteFSqrtY, [BWPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM). defm : BWWriteResPair<WriteFRcp, [BWPort0], 5, [1], 1, 5>; // Floating point reciprocal estimate. diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td index c7634fbba8b..611ed777575 100644 --- a/llvm/lib/Target/X86/X86SchedHaswell.td +++ b/llvm/lib/Target/X86/X86SchedHaswell.td @@ -148,13 +148,15 @@ def : WriteRes<WriteFStore, [HWPort237, HWPort4]>; def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; } def : WriteRes<WriteFMove, [HWPort5]>; -defm : HWWriteResPair<WriteFAdd, [HWPort1], 3, [1], 1, 5>; -defm : HWWriteResPair<WriteFAddY, [HWPort1], 3, [1], 1, 7>; -defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>; -defm : HWWriteResPair<WriteFCmpY, [HWPort1], 3, [1], 1, 7>; -defm : HWWriteResPair<WriteFCom, [HWPort1], 3>; -defm : HWWriteResPair<WriteFMul, [HWPort0], 5>; -defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles. +defm : HWWriteResPair<WriteFAdd, [HWPort1], 3, [1], 1, 5>; +defm : HWWriteResPair<WriteFAddY, [HWPort1], 3, [1], 1, 7>; +defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>; +defm : HWWriteResPair<WriteFCmpY, [HWPort1], 3, [1], 1, 7>; +defm : HWWriteResPair<WriteFCom, [HWPort1], 3>; +defm : HWWriteResPair<WriteFMul, [HWPort0], 5, [1], 1, 5>; +defm : HWWriteResPair<WriteFMulY, [HWPort0], 5, [1], 1, 7>; +defm : HWWriteResPair<WriteFDiv, [HWPort0], 12, [1], 1, 5>; // 10-14 cycles. +defm : HWWriteResPair<WriteFDivY, [HWPort0], 12, [1], 1, 7>; // 10-14 cycles. defm : HWWriteResPair<WriteFRcp, [HWPort0], 5, [1], 1, 5>; defm : HWWriteResPair<WriteFRcpY, [HWPort0], 5, [1], 1, 7>; defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5, [1], 1, 5>; diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td index 49b4d28b137..c4daa364a7d 100644 --- a/llvm/lib/Target/X86/X86SchedSandyBridge.td +++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td @@ -138,22 +138,24 @@ def : WriteRes<WriteFStore, [SBPort23, SBPort4]>; def : WriteRes<WriteFLoad, [SBPort23]> { let Latency = 6; } def : WriteRes<WriteFMove, [SBPort5]>; -defm : SBWriteResPair<WriteFAdd, [SBPort1], 3, [1], 1, 5>; -defm : SBWriteResPair<WriteFAddY, [SBPort1], 3, [1], 1, 7>; -defm : SBWriteResPair<WriteFCmp, [SBPort1], 3, [1], 1, 6>; -defm : SBWriteResPair<WriteFCmpY, [SBPort1], 3, [1], 1, 7>; -defm : SBWriteResPair<WriteFCom, [SBPort1], 3>; -defm : SBWriteResPair<WriteFMul, [SBPort0], 5, [1], 1, 6>; -defm : SBWriteResPair<WriteFDiv, [SBPort0], 24>; -defm : SBWriteResPair<WriteFRcp, [SBPort0], 5, [1], 1, 6>; -defm : SBWriteResPair<WriteFRcpY, [SBPort0], 5, [1], 1, 7>; -defm : SBWriteResPair<WriteFRsqrt, [SBPort0], 5, [1], 1, 6>; -defm : SBWriteResPair<WriteFRsqrtY,[SBPort0], 5, [1], 1, 7>; +defm : SBWriteResPair<WriteFAdd, [SBPort1], 3, [1], 1, 5>; +defm : SBWriteResPair<WriteFAddY, [SBPort1], 3, [1], 1, 7>; +defm : SBWriteResPair<WriteFCmp, [SBPort1], 3, [1], 1, 6>; +defm : SBWriteResPair<WriteFCmpY, [SBPort1], 3, [1], 1, 7>; +defm : SBWriteResPair<WriteFCom, [SBPort1], 3>; +defm : SBWriteResPair<WriteFMul, [SBPort0], 5, [1], 1, 6>; +defm : SBWriteResPair<WriteFMulY, [SBPort0], 5, [1], 1, 7>; +defm : SBWriteResPair<WriteFDiv, [SBPort0], 24, [1], 1, 5>; +defm : SBWriteResPair<WriteFDivY, [SBPort0], 24, [1], 1, 7>; +defm : SBWriteResPair<WriteFRcp, [SBPort0], 5, [1], 1, 6>; +defm : SBWriteResPair<WriteFRcpY, [SBPort0], 5, [1], 1, 7>; +defm : SBWriteResPair<WriteFRsqrt, [SBPort0], 5, [1], 1, 6>; +defm : SBWriteResPair<WriteFRsqrtY,[SBPort0], 5, [1], 1, 7>; defm : SBWriteResPair<WriteFSqrt, [SBPort0], 14, [1], 1, 5>; defm : SBWriteResPair<WriteFSqrtY, [SBPort0], 14, [1], 1, 7>; -defm : SBWriteResPair<WriteCvtF2I, [SBPort1], 3>; -defm : SBWriteResPair<WriteCvtI2F, [SBPort1], 4>; -defm : SBWriteResPair<WriteCvtF2F, [SBPort1], 3>; +defm : SBWriteResPair<WriteCvtF2I, [SBPort1], 3>; +defm : SBWriteResPair<WriteCvtI2F, [SBPort1], 4>; +defm : SBWriteResPair<WriteCvtF2F, [SBPort1], 3>; defm : SBWriteResPair<WriteFSign, [SBPort5], 1>; defm : SBWriteResPair<WriteFLogic, [SBPort5], 1, [1], 1, 6>; defm : SBWriteResPair<WriteFLogicY, [SBPort5], 1, [1], 1, 7>; @@ -1511,9 +1513,7 @@ def SBWriteResGroup111 : SchedWriteRes<[SBPort0,SBPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup111], (instregex "MUL_F(32|64)m", - "VMULPDYrm", - "VMULPSYrm")>; +def: InstRW<[SBWriteResGroup111], (instregex "MUL_F(32|64)m")>; def SBWriteResGroup112 : SchedWriteRes<[SBPort0,SBPort1,SBPort5]> { let Latency = 12; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td index 0b8e3504b2d..bb6c79eeb50 100644 --- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td @@ -151,13 +151,15 @@ def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; } def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>; def : WriteRes<WriteFMove, [SKLPort015]>; -defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3, [1], 1, 5>; // Floating point add/sub. -defm : SKLWriteResPair<WriteFAddY, [SKLPort1], 3, [1], 1, 7>; // Floating point add/sub (YMM/ZMM). -defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare. -defm : SKLWriteResPair<WriteFCmpY, [SKLPort01], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM). -defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags. -defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication. -defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division. +defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3, [1], 1, 5>; // Floating point add/sub. +defm : SKLWriteResPair<WriteFAddY, [SKLPort1], 3, [1], 1, 7>; // Floating point add/sub (YMM/ZMM). +defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare. +defm : SKLWriteResPair<WriteFCmpY, [SKLPort01], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM). +defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags. +defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5, [1], 1, 5>; // Floating point multiplication. +defm : SKLWriteResPair<WriteFMulY, [SKLPort0], 5, [1], 1, 7>; // Floating point multiplication (YMM/ZMM). +defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12, [1], 1, 5>; // 10-14 cycles. // Floating point division. +defm : SKLWriteResPair<WriteFDivY, [SKLPort0], 12, [1], 1, 7>; // 10-14 cycles. // Floating point division (YMM/ZMM). defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15, [1], 1, 5>; // Floating point square root. defm : SKLWriteResPair<WriteFSqrtY, [SKLPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM). defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate. diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td index 29de89824c2..16a6c2414ec 100755 --- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td @@ -151,23 +151,25 @@ def : WriteRes<WriteFLoad, [SKXPort23]> { let Latency = 5; } def : WriteRes<WriteFStore, [SKXPort237, SKXPort4]>; def : WriteRes<WriteFMove, [SKXPort015]>; -defm : SKXWriteResPair<WriteFAdd, [SKXPort015], 4, [1], 1, 6>; // Floating point add/sub. -defm : SKXWriteResPair<WriteFAddY,[SKXPort015], 4, [1], 1, 7>; // Floating point add/sub (YMM/ZMM). -defm : SKXWriteResPair<WriteFCmp, [SKXPort015], 4, [1], 1, 6>; // Floating point compare. -defm : SKXWriteResPair<WriteFCmpY,[SKXPort015], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM). -defm : SKXWriteResPair<WriteFCom, [SKXPort0], 2>; // Floating point compare to flags. -defm : SKXWriteResPair<WriteFMul, [SKXPort015], 4, [1], 1, 6>; // Floating point multiplication. -defm : SKXWriteResPair<WriteFDiv, [SKXPort0], 12>; // 10-14 cycles. // Floating point division. +defm : SKXWriteResPair<WriteFAdd, [SKXPort015], 4, [1], 1, 6>; // Floating point add/sub. +defm : SKXWriteResPair<WriteFAddY,[SKXPort015], 4, [1], 1, 7>; // Floating point add/sub (YMM/ZMM). +defm : SKXWriteResPair<WriteFCmp, [SKXPort015], 4, [1], 1, 6>; // Floating point compare. +defm : SKXWriteResPair<WriteFCmpY,[SKXPort015], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM). +defm : SKXWriteResPair<WriteFCom, [SKXPort0], 2>; // Floating point compare to flags. +defm : SKXWriteResPair<WriteFMul, [SKXPort015], 4, [1], 1, 6>; // Floating point multiplication. +defm : SKXWriteResPair<WriteFMulY,[SKXPort015], 4, [1], 1, 7>; // Floating point multiplication (YMM/ZMM). +defm : SKXWriteResPair<WriteFDiv, [SKXPort0], 12, [1], 1, 5>; // 10-14 cycles. // Floating point division. +defm : SKXWriteResPair<WriteFDivY, [SKXPort0], 12, [1], 1, 7>; // 10-14 cycles. // Floating point division (YMM/ZMM). defm : SKXWriteResPair<WriteFSqrt, [SKXPort0], 15, [1], 1, 5>; // Floating point square root. defm : SKXWriteResPair<WriteFSqrtY, [SKXPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM). -defm : SKXWriteResPair<WriteFRcp, [SKXPort0], 4, [1], 1, 6>; // Floating point reciprocal estimate. -defm : SKXWriteResPair<WriteFRcpY, [SKXPort0], 4, [1], 1, 7>; // Floating point reciprocal estimate (YMM/ZMM). -defm : SKXWriteResPair<WriteFRsqrt, [SKXPort0], 4, [1], 1, 6>; // Floating point reciprocal square root estimate. -defm : SKXWriteResPair<WriteFRsqrtY,[SKXPort0], 4, [1], 1, 7>; // Floating point reciprocal square root estimate (YMM/ZMM). -defm : SKXWriteResPair<WriteFMA, [SKXPort015], 4, [1], 1, 6>; // Fused Multiply Add. -defm : SKXWriteResPair<WriteFMAS, [SKXPort015], 4, [1], 1, 5>; // Fused Multiply Add (Scalar). -defm : SKXWriteResPair<WriteFMAY, [SKXPort015], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM). -defm : SKXWriteResPair<WriteFSign, [SKXPort0], 1>; // Floating point fabs/fchs. +defm : SKXWriteResPair<WriteFRcp, [SKXPort0], 4, [1], 1, 6>; // Floating point reciprocal estimate. +defm : SKXWriteResPair<WriteFRcpY, [SKXPort0], 4, [1], 1, 7>; // Floating point reciprocal estimate (YMM/ZMM). +defm : SKXWriteResPair<WriteFRsqrt, [SKXPort0], 4, [1], 1, 6>; // Floating point reciprocal square root estimate. +defm : SKXWriteResPair<WriteFRsqrtY,[SKXPort0], 4, [1], 1, 7>; // Floating point reciprocal square root estimate (YMM/ZMM). +defm : SKXWriteResPair<WriteFMA, [SKXPort015], 4, [1], 1, 6>; // Fused Multiply Add. +defm : SKXWriteResPair<WriteFMAS, [SKXPort015], 4, [1], 1, 5>; // Fused Multiply Add (Scalar). +defm : SKXWriteResPair<WriteFMAY, [SKXPort015], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM). +defm : SKXWriteResPair<WriteFSign, [SKXPort0], 1>; // Floating point fabs/fchs. defm : SKXWriteResPair<WriteFLogic, [SKXPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals. defm : SKXWriteResPair<WriteFLogicY, [SKXPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM). defm : SKXWriteResPair<WriteFShuffle, [SKXPort5], 1, [1], 1, 5>; // Floating point vector shuffles. @@ -3674,12 +3676,6 @@ def: InstRW<[SKXWriteResGroup161], (instregex "VCVTDQ2PDZ256rm(b?)", "VCVTUQQ2PDZ256rm(b?)", "VCVTUQQ2PDZrm(b?)", "VCVTUQQ2PSZ256rm(b?)", - "VMULPDYrm", - "VMULPDZ256rm(b?)", - "VMULPDZrm(b?)", - "VMULPSYrm", - "VMULPSZ256rm(b?)", - "VMULPSZrm(b?)", "VPLZCNTDZ256rm(b?)", "VPLZCNTDZrm(b?)", "VPLZCNTQZ256rm(b?)", diff --git a/llvm/lib/Target/X86/X86Schedule.td b/llvm/lib/Target/X86/X86Schedule.td index 85dcfc189f8..7b024d2715e 100644 --- a/llvm/lib/Target/X86/X86Schedule.td +++ b/llvm/lib/Target/X86/X86Schedule.td @@ -96,7 +96,9 @@ defm WriteFCmp : X86SchedWritePair; // Floating point compare. defm WriteFCmpY : X86SchedWritePair; // Floating point compare (YMM/ZMM). defm WriteFCom : X86SchedWritePair; // Floating point compare to flags. defm WriteFMul : X86SchedWritePair; // Floating point multiplication. +defm WriteFMulY : X86SchedWritePair; // Floating point multiplication (YMM/ZMM). defm WriteFDiv : X86SchedWritePair; // Floating point division. +defm WriteFDivY : X86SchedWritePair; // Floating point division (YMM/ZMM). defm WriteFSqrt : X86SchedWritePair; // Floating point square root. defm WriteFSqrtY : X86SchedWritePair; // Floating point square root (YMM/ZMM). defm WriteFRcp : X86SchedWritePair; // Floating point reciprocal estimate. @@ -210,9 +212,9 @@ def SchedWriteFAdd def SchedWriteFCmp : X86SchedWriteWidths<WriteFCmp, WriteFCmp, WriteFCmpY, WriteFCmpY>; def SchedWriteFMul - : X86SchedWriteWidths<WriteFMul, WriteFMul, WriteFMul, WriteFMul>; + : X86SchedWriteWidths<WriteFMul, WriteFMul, WriteFMulY, WriteFMulY>; def SchedWriteFDiv - : X86SchedWriteWidths<WriteFDiv, WriteFDiv, WriteFDiv, WriteFDiv>; + : X86SchedWriteWidths<WriteFDiv, WriteFDiv, WriteFDivY, WriteFDivY>; def SchedWriteFSqrt : X86SchedWriteWidths<WriteFSqrt, WriteFSqrt, WriteFSqrtY, WriteFSqrtY>; def SchedWriteFRcp diff --git a/llvm/lib/Target/X86/X86ScheduleAtom.td b/llvm/lib/Target/X86/X86ScheduleAtom.td index 8e64bbd54f2..d0222660416 100644 --- a/llvm/lib/Target/X86/X86ScheduleAtom.td +++ b/llvm/lib/Target/X86/X86ScheduleAtom.td @@ -208,11 +208,13 @@ defm : AtomWriteResPair<WriteFCmp, [AtomPort0], [AtomPort0], 5, 5, defm : AtomWriteResPair<WriteFCmpY, [AtomPort0], [AtomPort0], 5, 5, [5], [5]>; defm : AtomWriteResPair<WriteFCom, [AtomPort0], [AtomPort0], 5, 5, [5], [5]>; defm : AtomWriteResPair<WriteFMul, [AtomPort0], [AtomPort0], 4, 4, [4], [4]>; +defm : AtomWriteResPair<WriteFMulY, [AtomPort0], [AtomPort0], 4, 4, [4], [4]>; defm : AtomWriteResPair<WriteFRcp, [AtomPort0], [AtomPort0], 4, 4, [4], [4]>; defm : AtomWriteResPair<WriteFRcpY, [AtomPort0], [AtomPort0], 4, 4, [4], [4]>; defm : AtomWriteResPair<WriteFRsqrt, [AtomPort0], [AtomPort0], 4, 4, [4], [4]>; defm : AtomWriteResPair<WriteFRsqrtY, [AtomPort0], [AtomPort0], 4, 4, [4], [4]>; defm : AtomWriteResPair<WriteFDiv, [AtomPort01], [AtomPort01], 34, 34, [34], [34]>; +defm : AtomWriteResPair<WriteFDivY, [AtomPort01], [AtomPort01], 34, 34, [34], [34]>; defm : AtomWriteResPair<WriteFSqrt, [AtomPort01], [AtomPort01], 34, 34, [34], [34]>; defm : AtomWriteResPair<WriteFSqrtY, [AtomPort01], [AtomPort01], 34, 34, [34], [34]>; defm : AtomWriteResPair<WriteFSign, [AtomPort1], [AtomPort1]>; diff --git a/llvm/lib/Target/X86/X86ScheduleBtVer2.td b/llvm/lib/Target/X86/X86ScheduleBtVer2.td index a1b6358af38..7d32bc67d14 100644 --- a/llvm/lib/Target/X86/X86ScheduleBtVer2.td +++ b/llvm/lib/Target/X86/X86ScheduleBtVer2.td @@ -321,6 +321,7 @@ defm : JWriteResFpuPair<WriteFCmp, [JFPU0, JFPA], 2>; defm : JWriteResYMMPair<WriteFCmpY, [JFPU0, JFPA], 2, [2,2], 2>; defm : JWriteResFpuPair<WriteFCom, [JFPU0, JFPA, JALU0], 3>; defm : JWriteResFpuPair<WriteFMul, [JFPU1, JFPM], 2>; +defm : JWriteResYMMPair<WriteFMulY, [JFPU1, JFPM], 2, [2,2], 2>; defm : JWriteResFpuPair<WriteFMA, [JFPU1, JFPM], 2>; // NOTE: Doesn't exist on Jaguar. defm : JWriteResFpuPair<WriteFMAS, [JFPU1, JFPM], 2>; // NOTE: Doesn't exist on Jaguar. defm : JWriteResFpuPair<WriteFMAY, [JFPU1, JFPM], 2>; // NOTE: Doesn't exist on Jaguar. @@ -329,6 +330,7 @@ defm : JWriteResYMMPair<WriteFRcpY, [JFPU1, JFPM], 2, [2,2], 2>; defm : JWriteResFpuPair<WriteFRsqrt, [JFPU1, JFPM], 2>; defm : JWriteResYMMPair<WriteFRsqrtY, [JFPU1, JFPM], 2, [2,2], 2>; defm : JWriteResFpuPair<WriteFDiv, [JFPU1, JFPM], 19, [1, 19]>; +defm : JWriteResYMMPair<WriteFDivY, [JFPU1, JFPM], 38, [2, 38], 2>; defm : JWriteResFpuPair<WriteFSqrt, [JFPU1, JFPM], 21, [1, 21]>; defm : JWriteResYMMPair<WriteFSqrtY, [JFPU1, JFPM], 42, [2, 42], 2>; defm : JWriteResFpuPair<WriteFSign, [JFPU1, JFPM], 2>; @@ -557,20 +559,6 @@ def JWriteVDPPSYLd: SchedWriteRes<[JLAGU, JFPU1, JFPM, JFPA]> { } def : InstRW<[JWriteVDPPSYLd, ReadAfterLd], (instrs VDPPSYrmi)>; -def JWriteFDivY: SchedWriteRes<[JFPU1, JFPM]> { - let Latency = 38; - let ResourceCycles = [2, 38]; - let NumMicroOps = 2; -} -def : InstRW<[JWriteFDivY], (instrs VDIVPDYrr, VDIVPSYrr)>; - -def JWriteFDivYLd: SchedWriteRes<[JLAGU, JFPU1, JFPM]> { - let Latency = 43; - let ResourceCycles = [2, 2, 38]; - let NumMicroOps = 2; -} -def : InstRW<[JWriteFDivYLd, ReadAfterLd], (instrs VDIVPDYrm, VDIVPSYrm)>; - def JWriteVMULYPD: SchedWriteRes<[JFPU1, JFPM]> { let Latency = 4; let ResourceCycles = [2, 4]; @@ -585,20 +573,6 @@ def JWriteVMULYPDLd: SchedWriteRes<[JLAGU, JFPU1, JFPM]> { } def : InstRW<[JWriteVMULYPDLd, ReadAfterLd], (instrs VMULPDYrm)>; -def JWriteVMULYPS: SchedWriteRes<[JFPU1, JFPM]> { - let Latency = 2; - let ResourceCycles = [2, 2]; - let NumMicroOps = 2; -} -def : InstRW<[JWriteVMULYPS], (instrs VMULPSYrr)>; - -def JWriteVMULYPSLd: SchedWriteRes<[JLAGU, JFPU1, JFPM]> { - let Latency = 7; - let ResourceCycles = [2, 2, 2]; - let NumMicroOps = 2; -} -def : InstRW<[JWriteVMULYPSLd, ReadAfterLd], (instrs VMULPSYrm)>; - def JWriteVMULPD: SchedWriteRes<[JFPU1, JFPM]> { let Latency = 4; let ResourceCycles = [1, 2]; diff --git a/llvm/lib/Target/X86/X86ScheduleSLM.td b/llvm/lib/Target/X86/X86ScheduleSLM.td index cfd626f3b92..ea0edaade4e 100644 --- a/llvm/lib/Target/X86/X86ScheduleSLM.td +++ b/llvm/lib/Target/X86/X86ScheduleSLM.td @@ -135,7 +135,9 @@ defm : SLMWriteResPair<WriteFCmp, [SLM_FPC_RSV1], 3>; defm : SLMWriteResPair<WriteFCmpY, [SLM_FPC_RSV1], 3>; defm : SLMWriteResPair<WriteFCom, [SLM_FPC_RSV1], 3>; defm : SLMWriteResPair<WriteFMul, [SLM_FPC_RSV0, SLMFPMultiplier], 5, [1,2]>; +defm : SLMWriteResPair<WriteFMulY, [SLM_FPC_RSV0, SLMFPMultiplier], 5, [1,2]>; defm : SLMWriteResPair<WriteFDiv, [SLM_FPC_RSV0, SLMFPDivider], 34, [1,34]>; +defm : SLMWriteResPair<WriteFDivY, [SLM_FPC_RSV0, SLMFPDivider], 34, [1,34]>; defm : SLMWriteResPair<WriteFRcp, [SLM_FPC_RSV0], 5>; defm : SLMWriteResPair<WriteFRcpY, [SLM_FPC_RSV0], 5>; defm : SLMWriteResPair<WriteFRsqrt, [SLM_FPC_RSV0], 5>; diff --git a/llvm/lib/Target/X86/X86ScheduleZnver1.td b/llvm/lib/Target/X86/X86ScheduleZnver1.td index 96947da8b02..e8230d85733 100644 --- a/llvm/lib/Target/X86/X86ScheduleZnver1.td +++ b/llvm/lib/Target/X86/X86ScheduleZnver1.td @@ -207,6 +207,7 @@ defm : ZnWriteResFpuPair<WriteCvtI2F, [ZnFPU3], 5>; defm : ZnWriteResFpuPair<WriteCvtF2F, [ZnFPU3], 5>; defm : ZnWriteResFpuPair<WriteCvtF2I, [ZnFPU3], 5>; defm : ZnWriteResFpuPair<WriteFDiv, [ZnFPU3], 15>; +defm : ZnWriteResFpuPair<WriteFDivY, [ZnFPU3], 15>; defm : ZnWriteResFpuPair<WriteFSign, [ZnFPU3], 2>; defm : ZnWriteResFpuPair<WriteFLogic, [ZnFPU], 1>; defm : ZnWriteResFpuPair<WriteFLogicY, [ZnFPU], 1>; @@ -215,6 +216,7 @@ defm : ZnWriteResFpuPair<WriteFShuffleY, [ZnFPU12], 1>; defm : ZnWriteResFpuPair<WriteFVarShuffle, [ZnFPU12], 1>; defm : ZnWriteResFpuPair<WriteFVarShuffleY,[ZnFPU12], 1>; defm : ZnWriteResFpuPair<WriteFMul, [ZnFPU0], 5>; +defm : ZnWriteResFpuPair<WriteFMulY, [ZnFPU0], 5>; defm : ZnWriteResFpuPair<WriteFMA, [ZnFPU03], 5>; defm : ZnWriteResFpuPair<WriteFMAS, [ZnFPU03], 5>; defm : ZnWriteResFpuPair<WriteFMAY, [ZnFPU03], 5>; |