[X86ISelLowering] Add additional support for multiplication-to-shift conversion.
authorChen Li <meloli87@gmail.com>
Fri, 11 Dec 2015 23:39:32 +0000 (23:39 +0000)
committerChen Li <meloli87@gmail.com>
Fri, 11 Dec 2015 23:39:32 +0000 (23:39 +0000)
commit3c55c7bc30f513dd1544b3846e1204eb959f40e2
tree920f4caf101df969d9b51929828ac95cfa00fb26
parent31b250abad3b61969ceb4000bf735339b1cc54dc
[X86ISelLowering] Add additional support for multiplication-to-shift conversion.

Summary: This patch adds support of conversion (mul x, 2^N + 1) => (add (shl x, N), x) and (mul x, 2^N - 1) => (sub (shl x, N), x) if the multiplication can not be converted to LEA + SHL or LEA + LEA. LLVM has already supported this on ARM, and it should also be useful on X86. Note the patch currently only applies to cases where the constant operand is positive, and I am planing to add another patch to support negative cases after this.

Reviewers: craig.topper, RKSimon

Subscribers: aemerson, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255391 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/imul.ll