[DAGCombiner] Fix a crash caused by a missing check for legal type when trying to...
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Sun, 13 Jul 2014 21:02:14 +0000 (21:02 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Sun, 13 Jul 2014 21:02:14 +0000 (21:02 +0000)
commit124ce3ab36b59aaa458b8bb545996f385fe92dfc
tree90c5f9b2c4ec5272bf095002353d6a1e7cf72d85
parent083db8b72c26dc516cdc17b5484e76b81a816065
[DAGCombiner] Fix a crash caused by a missing check for legal type when trying to fold shuffles.

Verify that DAGCombiner does not crash when trying to fold a pair of shuffles
according to rule (added at r212539):
  (shuffle (shuffle A, Undef, M0), Undef, M1) -> (shuffle A, Undef, M2)

The DAGCombiner avoids folding shuffles if the resulting shuffle dag node
is not legal for the target. That means, the resulting shuffle must have
legal type and legal mask.

Before, the DAGCombiner only called method
'TargetLowering::isShuffleMaskLegal' to check if it was "safe" to fold according
to the above-mentioned rule. However, this caused a crash in the x86 backend
since method 'isShuffleMaskLegal' always expects to be called on a
legal vector type.

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