summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-09-23 17:40:24 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-09-23 17:40:24 +0000
commit19952add7cea53050ee9b80b99494ebc00acefda (patch)
tree3e28dc4d5236a38569952d582e5b1b6c28d120fe /llvm/lib
parent22d31c5e0fcb14a8343c2bc61602fb46c3dab84f (diff)
downloadbcm5719-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.td24
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;
OpenPOWER on IntegriCloud