[InstCombine][X86] Expand MOVMSK to generic IR (PR39927)
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 8 Apr 2019 13:17:51 +0000 (13:17 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 8 Apr 2019 13:17:51 +0000 (13:17 +0000)
commitb4f1bfa65982804d0e34beffea2753783c9878c2
treefe13b4ecf802051b0a5ea4688d3cf3fa2f1f3e5f
parent91f60b44958fbcaf6450e82ef40965e92aedda5f
[InstCombine][X86] Expand MOVMSK to generic IR (PR39927)

First step towards removing the MOVMSK intrinsics completely - this patch expands MOVMSK to the pattern:

e.g. PMOVMSKB(v16i8 x):
%cmp = icmp slt <16 x i8> %x, zeroinitializer
%int = bitcast <16 x i8> %cmp to i16
%res = zext i16 %int to i32

Which is correctly handled by ISel and FastIsel (give or take an annoying movzx move....): https://godbolt.org/z/rkrSFW

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

llvm-svn: 357909
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
llvm/test/Transforms/InstCombine/X86/x86-movmsk.ll