[X86] Correct the scheduling data for register forms of XCHG and XADD on Intel CPUs.
authorCraig Topper <craig.topper@intel.com>
Thu, 19 Apr 2018 18:00:17 +0000 (18:00 +0000)
committerCraig Topper <craig.topper@intel.com>
Thu, 19 Apr 2018 18:00:17 +0000 (18:00 +0000)
commitb5f265913060be12d375adf11b417def00893e66
tree1302879ec9a79d9f4456ddf522760b2bf88dcdec
parenta201787fd700b4eaaf951d381a158d093031e71a
[X86] Correct the scheduling data for register forms of XCHG and XADD on Intel CPUs.

The XCHG16rr/XCHG32rr/XCHG64rr instructions should be 3 uops just like XCHG8rr. I believe they're just implemented as 3 move uops with a temporary register.

XADD is probably 2 moves and an add also using a temporary register.

Change the latency for both from 2 cycles to 3 cycles. Only 2 of the uops are serialized in their execution, the move into the temporary and the move out of the temporary. The move from one GPR to the other should be able to go in parallel with this if there are ALU resources available.

llvm-svn: 330349
llvm/lib/Target/X86/X86SchedBroadwell.td
llvm/lib/Target/X86/X86SchedHaswell.td
llvm/lib/Target/X86/X86SchedSandyBridge.td
llvm/lib/Target/X86/X86SchedSkylakeClient.td
llvm/lib/Target/X86/X86SchedSkylakeServer.td
llvm/test/CodeGen/X86/schedule-x86_32.ll
llvm/test/CodeGen/X86/schedule-x86_64.ll