[X86] In decomposeMulByConstant, legalize the VT before querying whether the multiply...
authorCraig Topper <craig.topper@intel.com>
Thu, 1 Aug 2019 18:49:07 +0000 (18:49 +0000)
committerCraig Topper <craig.topper@intel.com>
Thu, 1 Aug 2019 18:49:07 +0000 (18:49 +0000)
commita9ed5436bdf250f3d9f1ecda4f2a3541ea4b037d
tree8af6846ba6904ff08bd1f3616496609f0a0100b9
parent005cc423168196b2e0c7b39d5465744bad951bf3
[X86] In decomposeMulByConstant, legalize the VT before querying whether the multiply is legal

If a type is larger than a legal type and needs to be split, we would previously allow the multiply to be decomposed even if the split multiply is legal. Since the shift + add/sub code would also need to be split, its not any better to decompose it.

This patch figures out what type the mul will eventually be legalized to and then uses that type for the query. I tried just returning false illegal types and letting them get handled after type legalization, but then we can't recognize and i64 constant splat on 32-bit targets since will be destroyed by type legalization. We could special case vectors of i64 to avoid that...

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

llvm-svn: 367601
llvm/include/llvm/CodeGen/TargetLowering.h
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86ISelLowering.h
llvm/test/CodeGen/X86/vector-mul.ll