ARM ISel: Don't create illegal types during LowerMUL
authorArnold Schwaighofer <aschwaighofer@apple.com>
Tue, 14 May 2013 22:33:24 +0000 (22:33 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Tue, 14 May 2013 22:33:24 +0000 (22:33 +0000)
commit101a36117c2e5e760ebb2b476d6c5b2b52cac6e8
tree5f62e179373a73976f79989b2f547541a710b0db
parent5150270d071f05c6ea1fd26ef448954ddb5746dc
ARM ISel: Don't create illegal types during LowerMUL

The transformation happening here is that we want to turn a
"mul(ext(X), ext(X))" into a "vmull(X, X)", stripping off the extension. We have
to make sure that X still has a valid vector type - possibly recreate an
extension to a smaller type. In case of a extload of a memory type smaller than
64 bit we used create a ext(load()). The problem with doing this - instead of
recreating an extload - is that an illegal type is exposed.

This patch fixes this by creating extloads instead of ext(load()) sequences.

Fixes PR15970.

radar://13871383

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181842 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMISelLowering.cpp
test/CodeGen/ARM/vmul.ll