[X86] - Catch extra combine opportunities for redundant imuls.
authorZia Ansari <zia.ansari@intel.com>
Thu, 22 Oct 2015 16:14:45 +0000 (16:14 +0000)
committerZia Ansari <zia.ansari@intel.com>
Thu, 22 Oct 2015 16:14:45 +0000 (16:14 +0000)
commit02da4e7721d20f27c55547bf52c9a0f615447646
tree323cb6a9ca2161f7f39011ab829d2432cf7857f1
parente2e776f769c27150b229c465b0730b140393e580
[X86] - Catch extra combine opportunities for redundant imuls.

When we fold "mul ((add x, c1), c1)" -> "add ((mul x, c2), c1*c2)", we bail if (add x, c1) has multiple
users which would result in an extra add instruction.
In such cases, this patch adds a check to see if we can eliminate a multiply instruction in exchange for the extra add.

I also added the capability of doing the existing optimization with non-splatted vectors (splatted also works).

Differential Revision: http://reviews.llvm.org/D13740

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251028 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/X86/combine-multiplies.ll [new file with mode: 0644]