diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86Schedule.td')
| -rw-r--r-- | llvm/lib/Target/X86/X86Schedule.td | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/X86Schedule.td b/llvm/lib/Target/X86/X86Schedule.td index 768e5e15d6a..cc933c80eef 100644 --- a/llvm/lib/Target/X86/X86Schedule.td +++ b/llvm/lib/Target/X86/X86Schedule.td @@ -61,6 +61,13 @@ class X86SchedWriteWidths<X86FoldableSchedWrite sScl, X86FoldableSchedWrite ZMM = s512; // ZMM operations. } +// Multiclass that wraps X86SchedWriteWidths for each fp vector type. +class X86SchedWriteSizes<X86SchedWriteWidths sPS, + X86SchedWriteWidths sPD> { + X86SchedWriteWidths PS = sPS; + X86SchedWriteWidths PD = sPD; +} + // Loads, stores, and moves, not folded with other operations. def WriteLoad : SchedWrite; def WriteStore : SchedWrite; @@ -111,10 +118,19 @@ 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 WriteFSqrtX : X86SchedWritePair; // Floating point square root (XMM). +defm WriteFSqrtY : X86SchedWritePair; // Floating point square root (YMM). +defm WriteFSqrtZ : X86SchedWritePair; // Floating point square root (ZMM). +defm WriteFSqrt64 : X86SchedWritePair; // Floating point double square root. +defm WriteFSqrt64X : X86SchedWritePair; // Floating point double square root (XMM). +defm WriteFSqrt64Y : X86SchedWritePair; // Floating point double square root (YMM). +defm WriteFSqrt64Z : X86SchedWritePair; // Floating point double square root (ZMM). +defm WriteFSqrt80 : X86SchedWritePair; // Floating point long double square root. defm WriteFRcp : X86SchedWritePair; // Floating point reciprocal estimate. +defm WriteFRcpX : X86SchedWritePair; // Floating point reciprocal estimate (XMM). defm WriteFRcpY : X86SchedWritePair; // Floating point reciprocal estimate (YMM/ZMM). defm WriteFRsqrt : X86SchedWritePair; // Floating point reciprocal square root estimate. +defm WriteFRsqrtX: X86SchedWritePair; // Floating point reciprocal square root estimate (XMM). defm WriteFRsqrtY: X86SchedWritePair; // Floating point reciprocal square root estimate (YMM/ZMM). defm WriteFMA : X86SchedWritePair; // Fused Multiply Add. defm WriteFMAX : X86SchedWritePair; // Fused Multiply Add (XMM). @@ -261,11 +277,15 @@ def SchedWriteDPPS def SchedWriteFDiv : X86SchedWriteWidths<WriteFDiv, WriteFDiv, WriteFDivY, WriteFDivY>; def SchedWriteFSqrt - : X86SchedWriteWidths<WriteFSqrt, WriteFSqrt, WriteFSqrtY, WriteFSqrtY>; + : X86SchedWriteWidths<WriteFSqrt, WriteFSqrtX, + WriteFSqrtY, WriteFSqrtZ>; +def SchedWriteFSqrt64 + : X86SchedWriteWidths<WriteFSqrt64, WriteFSqrt64X, + WriteFSqrt64Y, WriteFSqrt64Z>; def SchedWriteFRcp - : X86SchedWriteWidths<WriteFRcp, WriteFRcp, WriteFRcpY, WriteFRcpY>; + : X86SchedWriteWidths<WriteFRcp, WriteFRcpX, WriteFRcpY, WriteFRcpY>; def SchedWriteFRsqrt - : X86SchedWriteWidths<WriteFRsqrt, WriteFRsqrt, WriteFRsqrtY, WriteFRsqrtY>; + : X86SchedWriteWidths<WriteFRsqrt, WriteFRsqrtX, WriteFRsqrtY, WriteFRsqrtY>; def SchedWriteFRnd : X86SchedWriteWidths<WriteFRnd, WriteFRnd, WriteFRndY, WriteFRndY>; def SchedWriteFLogic @@ -324,6 +344,16 @@ def SchedWriteVarBlend : X86SchedWriteWidths<WriteVarBlend, WriteVarBlend, WriteVarBlendY, WriteVarBlendY>; +// Vector size wrappers. +def SchedWriteFAddSizes + : X86SchedWriteSizes<SchedWriteFAdd, SchedWriteFAdd>; +def SchedWriteFMulSizes + : X86SchedWriteSizes<SchedWriteFMul, SchedWriteFMul>; +def SchedWriteFDivSizes + : X86SchedWriteSizes<SchedWriteFDiv, SchedWriteFDiv>; +def SchedWriteFSqrtSizes + : X86SchedWriteSizes<SchedWriteFSqrt, SchedWriteFSqrt64>; + //===----------------------------------------------------------------------===// // Generic Processor Scheduler Models. |

