[X86] Correct scheduler information for rotate by constant for Haswell, Broadwell...
authorCraig Topper <craig.topper@intel.com>
Thu, 7 Mar 2019 21:22:56 +0000 (21:22 +0000)
committerCraig Topper <craig.topper@intel.com>
Thu, 7 Mar 2019 21:22:56 +0000 (21:22 +0000)
commitd0c2dba644e27210ed13cd638aa8b8e677ed757d
tree8f6b0772500653e0f099b1c28ac044bebae8b740
parentb3af5d3e57107a3bffe4c2d38b22ae96cee52245
[X86] Correct scheduler information for rotate by constant for Haswell, Broadwell, and Skylake.

Rotate with explicit immediate is a single uop from Haswell on. An immediate of 1 has a dependency on the previous writer of flags, but the other immediate values do not.

The implicit rotate by 1 instruction is 2 uops. But the flags are merged after the rotate uop so the data result does not see the flag dependency. But I don't think we have any way of modeling that.

RORX is 1 uop without the load. 2 uops with the load. We currently model these with WriteShift/WriteShiftLd.

Differential Revision: https://reviews.llvm.org/D59077

llvm-svn: 355636
llvm/lib/Target/X86/X86SchedBroadwell.td
llvm/lib/Target/X86/X86SchedHaswell.td
llvm/lib/Target/X86/X86SchedSkylakeClient.td
llvm/lib/Target/X86/X86SchedSkylakeServer.td
llvm/test/tools/llvm-mca/X86/Broadwell/resources-x86_64.s
llvm/test/tools/llvm-mca/X86/Haswell/resources-x86_64.s
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-x86_64.s
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-x86_64.s