summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86SchedSandyBridge.td
diff options
context:
space:
mode:
authorClement Courbet <courbet@google.com>2018-11-09 09:49:06 +0000
committerClement Courbet <courbet@google.com>2018-11-09 09:49:06 +0000
commite6b727e552844168c53ca1aff9c87b196f221a23 (patch)
tree6b2a2ad728fcef405b457389c3fd2b23463e1629 /llvm/lib/Target/X86/X86SchedSandyBridge.td
parentfa9cf897347c456313834672a54386baca2e8b77 (diff)
downloadbcm5719-llvm-e6b727e552844168c53ca1aff9c87b196f221a23.tar.gz
bcm5719-llvm-e6b727e552844168c53ca1aff9c87b196f221a23.zip
[X86] Fix VZEROUPPER scheduling info on SNB,HSW,BDW,SXL,SKX.
Summary: Starting from SNB, VZEROUPPER is handled by the renamer and uses no proc resources. After HSW, it also has zero latency. This fixes PR35606. To reproduce: Uops: llvm-exegesis -mode=uops -opcode-name=VZEROUPPER Latency: echo -e '#LLVM-EXEGESIS-DEFREG XMM0 1\n#LLVM-EXEGESIS-DEFREG XMM1 1\nvzeroupper' | /tmp/llvm-exegesis -mode=latency -snippets-file=- echo -e '#LLVM-EXEGESIS-DEFREG XMM0 1\n#LLVM-EXEGESIS-DEFREG XMM1 1\nvzeroupper\naddps %xmm0, %xmm1' | /tmp/llvm-exegesis -mode=latency -snippets-file=- Reviewers: RKSimon, craig.topper, andreadb Subscribers: gbedwell, llvm-commits Differential Revision: https://reviews.llvm.org/D54107 llvm-svn: 346482
Diffstat (limited to 'llvm/lib/Target/X86/X86SchedSandyBridge.td')
-rw-r--r--llvm/lib/Target/X86/X86SchedSandyBridge.td7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td
index 569ae366eaa..9dbf0976989 100644
--- a/llvm/lib/Target/X86/X86SchedSandyBridge.td
+++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td
@@ -1112,6 +1112,13 @@ def SBWriteResGroupVzeroall : SchedWriteRes<[SBPort5]> {
}
def: InstRW<[SBWriteResGroupVzeroall], (instrs VZEROALL)>;
+def SBWriteResGroupVzeroupper : SchedWriteRes<[]> {
+ let Latency = 1;
+ let NumMicroOps = 4;
+ let ResourceCycles = [];
+}
+def: InstRW<[SBWriteResGroupVzeroupper], (instrs VZEROUPPER)>;
+
def: InstRW<[WriteZero], (instrs CLC)>;
// Intruction variants handled by the renamer. These might not need execution
OpenPOWER on IntegriCloud