[X86] Prefer reduced width multiplication over pmulld on Silvermont
authorZvi Rackover <zvi.rackover@intel.com>
Tue, 6 Dec 2016 19:35:20 +0000 (19:35 +0000)
committerZvi Rackover <zvi.rackover@intel.com>
Tue, 6 Dec 2016 19:35:20 +0000 (19:35 +0000)
commit8bc7e4da516c7a8cd3f1067fadb9c52ee297f6f4
tree3a87c9ef3bca7962b449ef089f9906acec19bcee
parente6c29d6d854cbbafc108cf32f9676157464f39fc
[X86] Prefer reduced width multiplication over pmulld on Silvermont

Summary:
Prefer expansions such as: pmullw,pmulhw,unpacklwd,unpackhwd over pmulld.
On Silvermont [source: Optimization Reference Manual]:
PMULLD has a throughput of 1/11 [instruction/cycles].
PMULHUW/PMULHW/PMULLW have a throughput of 1/2 [instruction/cycles].

Fixes pr31202.

Analysis of this issue was done by Fahana Aleen.

Reviewers: wmi, delena, mkuper

Subscribers: RKSimon, llvm-commits

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

llvm-svn: 288844
llvm/lib/Target/X86/X86.td
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86Subtarget.cpp
llvm/lib/Target/X86/X86Subtarget.h
llvm/test/CodeGen/X86/slow-pmulld.ll [new file with mode: 0644]