diff options
author | Clement Courbet <courbet@google.com> | 2018-11-09 09:49:06 +0000 |
---|---|---|
committer | Clement Courbet <courbet@google.com> | 2018-11-09 09:49:06 +0000 |
commit | e6b727e552844168c53ca1aff9c87b196f221a23 (patch) | |
tree | 6b2a2ad728fcef405b457389c3fd2b23463e1629 /llvm/lib/Target | |
parent | fa9cf897347c456313834672a54386baca2e8b77 (diff) | |
download | bcm5719-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')
-rw-r--r-- | llvm/lib/Target/X86/X86SchedBroadwell.td | 6 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedHaswell.td | 6 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedSandyBridge.td | 7 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedSkylakeClient.td | 6 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86SchedSkylakeServer.td | 6 |
5 files changed, 19 insertions, 12 deletions
diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td index 028729057fe..dff32daa537 100644 --- a/llvm/lib/Target/X86/X86SchedBroadwell.td +++ b/llvm/lib/Target/X86/X86SchedBroadwell.td @@ -878,10 +878,10 @@ def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> { } def: InstRW<[BWWriteResGroup45], (instrs FNCLEX)>; -def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> { - let Latency = 4; +def BWWriteResGroup46 : SchedWriteRes<[]> { + let Latency = 0; let NumMicroOps = 4; - let ResourceCycles = [1,3]; + let ResourceCycles = []; } def: InstRW<[BWWriteResGroup46], (instrs VZEROUPPER)>; diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td index 799ba1efdde..429558ef2c5 100644 --- a/llvm/lib/Target/X86/X86SchedHaswell.td +++ b/llvm/lib/Target/X86/X86SchedHaswell.td @@ -1408,10 +1408,10 @@ def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> { } def: InstRW<[HWWriteResGroup81], (instrs FNCLEX)>; -def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> { - let Latency = 4; +def HWWriteResGroup82 : SchedWriteRes<[]> { + let Latency = 0; let NumMicroOps = 4; - let ResourceCycles = [1,3]; + let ResourceCycles = []; } def: InstRW<[HWWriteResGroup82], (instrs VZEROUPPER)>; 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 diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td index d4a3eb07b98..2c9eb751608 100644 --- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td @@ -897,10 +897,10 @@ def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> { } def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>; -def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> { - let Latency = 4; +def SKLWriteResGroup56 : SchedWriteRes<[]> { + let Latency = 0; let NumMicroOps = 4; - let ResourceCycles = [1,3]; + let ResourceCycles = []; } def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td index cbcb6a6e58b..ec8e4db02d8 100644 --- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td @@ -1009,10 +1009,10 @@ def SKXWriteResGroup55 : SchedWriteRes<[SKXPort0156]> { } def: InstRW<[SKXWriteResGroup55], (instrs FNCLEX)>; -def SKXWriteResGroup56 : SchedWriteRes<[SKXPort015,SKXPort0156]> { - let Latency = 4; +def SKXWriteResGroup56 : SchedWriteRes<[]> { + let Latency = 0; let NumMicroOps = 4; - let ResourceCycles = [1,3]; + let ResourceCycles = []; } def: InstRW<[SKXWriteResGroup56], (instrs VZEROUPPER)>; |