diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-23 17:40:24 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-23 17:40:24 +0000 |
| commit | 19952add7cea53050ee9b80b99494ebc00acefda (patch) | |
| tree | 3e28dc4d5236a38569952d582e5b1b6c28d120fe /llvm/lib | |
| parent | 22d31c5e0fcb14a8343c2bc61602fb46c3dab84f (diff) | |
| download | bcm5719-llvm-19952add7cea53050ee9b80b99494ebc00acefda.tar.gz bcm5719-llvm-19952add7cea53050ee9b80b99494ebc00acefda.zip | |
[X86] Added missing RCL/RCR schedule overrides to the generic SNB model
The SandyBridge model was missing schedule values for the RCL/RCR values - instead using the (incredibly optimistic) WriteShift (now WriteRotate) defaults.
I've added overrides with more realistic (slow) values, based on a mixture of Agner/instlatx64 numbers and what later Intel models do as well.
This is necessary to allow WriteRotate to be updated to remove other rotate overrides.
It'd probably be a good idea to investigate a WriteRotateCarry class at some point but its not high priority given the unusualness of these instructions.
llvm-svn: 342842
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86SchedSandyBridge.td | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td index d6a73a3e8de..f805e82b7e1 100644 --- a/llvm/lib/Target/X86/X86SchedSandyBridge.td +++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td @@ -655,6 +655,14 @@ def SBWriteResGroup22 : SchedWriteRes<[SBPort0,SBPort5]> { } def: InstRW<[SBWriteResGroup22], (instregex "(V?)EXTRACTPSrr")>; +def SBWriteResGroup23 : SchedWriteRes<[SBPort05]> { + let Latency = 2; + let NumMicroOps = 3; + let ResourceCycles = [3]; +} +def: InstRW<[SBWriteResGroup23], (instregex "RCL(8|16|32|64)r1", + "RCR(8|16|32|64)r1")>; + def SBWriteResGroup23_2 : SchedWriteRes<[SBPort05]> { let Latency = 3; let NumMicroOps = 3; @@ -729,6 +737,14 @@ def SBWriteResGroup31 : SchedWriteRes<[SBPort23]> { def: InstRW<[SBWriteResGroup31], (instregex "MOVSX(16|32|64)rm(8|16|32)", "MOVZX(16|32|64)rm(8|16)")>; +def SBWriteResGroup76 : SchedWriteRes<[SBPort05]> { + let Latency = 5; + let NumMicroOps = 8; + let ResourceCycles = [8]; +} +def: InstRW<[SBWriteResGroup76], (instregex "RCL(8|16|32|64)r(i|CL)", + "RCR(8|16|32|64)r(i|CL)")>; + def SBWriteResGroup33 : SchedWriteRes<[SBPort4,SBPort23]> { let Latency = 5; let NumMicroOps = 2; @@ -1102,6 +1118,14 @@ def SBWriteResGroup106 : SchedWriteRes<[SBPort1,SBPort23]> { } def: InstRW<[SBWriteResGroup106], (instregex "FICOM(P?)(16|32)m")>; +def SBWriteResGroup108 : SchedWriteRes<[SBPort05,SBPort23]> {
+ let Latency = 11;
+ let NumMicroOps = 11;
+ let ResourceCycles = [7,4];
+}
+def: InstRW<[SBWriteResGroup108], (instregex "RCL(8|16|32|64)m",
+ "RCR(8|16|32|64)m")>; + def SBWriteResGroup111 : SchedWriteRes<[SBPort0,SBPort23]> { let Latency = 12; let NumMicroOps = 2; |

