[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)
commit8f509a7044e588bc74ed6d1b3256dab3915c550f
tree4ded8ba513857b39586f5377f0782ea3b871f4d1
parentde1dc9c98f9ce74d38aceb44e00d258370d1bb34
[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

llvm-svn: 251028
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/X86/combine-multiplies.ll [new file with mode: 0644]