[InstCombine] Improve Vector Demanded Bits Through Bitcasts
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 29 Sep 2015 08:19:11 +0000 (08:19 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 29 Sep 2015 08:19:11 +0000 (08:19 +0000)
commite6204cf2f1990eb90e727e003e687ef5b84c8a75
tree08580fea0e21269110a0bfd482c359a073951107
parente2adff7685023916aa54b25bbaa49b3a9689f022
[InstCombine] Improve Vector Demanded Bits Through Bitcasts

Currently SimplifyDemandedVectorElts can only peek through bitcasts if the vectors have the same number of elements.

This patch fixes and enables some existing (disabled) code to support bitcasting to vectors with more/fewer elements. It currently only accepts cases when vectors alias cleanly (i.e. number of elements are an exact multiple of the other vector).

This was added to improve the demanded vector elements support for SSE vector shifts which require the __m128i (<2 x i64>) argument type to be bitcast to the vector type for the builtin shift. I've added extra tests for various additional bitcasts.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248784 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
test/Transforms/InstCombine/x86-vector-shifts.ll