[llvm-bugs] [Bug 39927] New: [InstCombine] Attempt to replace MOVMSK with zext (bitcast <X x i1> to iX) to i32
via llvm-bugs
llvm-bugs at lists.llvm.org
Sun Dec 9 01:41:31 PST 2018
https://bugs.llvm.org/show_bug.cgi?id=39927
Bug ID: 39927
Summary: [InstCombine] Attempt to replace MOVMSK with zext
(bitcast <X x i1> to iX) to i32
Product: libraries
Version: trunk
Hardware: PC
OS: Windows NT
Status: NEW
Severity: enhancement
Priority: P
Component: Backend: X86
Assignee: unassignedbugs at nondot.org
Reporter: llvm-dev at redking.me.uk
CC: craig.topper at gmail.com, llvm-bugs at lists.llvm.org,
llvm-dev at redking.me.uk, spatel+llvm at rotateright.com
https://godbolt.org/z/SvH3do
Very similar to what we do with SSE BLENDV cases from a comparison+sext that
can be replaced with a select, we should now be able to replace MOVMSK
intrinsics with bitcasts from the comparison result.
PMOVMSKB <X x i8>
MOVMSKPS <X x float>
MOVMSKPD <X x float>
declare i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8>)
define i32 @movmsk_16i8(<16 x i8>, <16 x i8>) {
%3 = icmp sgt <16 x i8> %0, %1
%4 = sext <16 x i1> %3 to <16 x i8>
%5 = tail call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %4)
ret i32 %5
}
define i32 @movmsk_16i8_select(<16 x i8>, <16 x i8>) {
%3 = icmp sgt <16 x i8> %0, %1
%4 = bitcast <16 x i1> %3 to i16
%5 = zext i16 %4 to i32
ret i32 %5
}
Cases where the comparison arguments don't match the MOVMSK arguments are
trickier, but this is what I've managed so far (depending on what we do with
the MOVMSK scalar result we should be able to do a lot better):
define i32 @movmsk_8i16(<8 x i16>, <8 x i16>) {
%3 = icmp sgt <8 x i16> %0, %1
%4 = sext <8 x i1> %3 to <8 x i16>
%5 = bitcast <8 x i16> %4 to <16 x i8>
%6 = tail call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %5)
ret i32 %6
}
define i32 @movmsk_8i16_select(<8 x i16>, <8 x i16>) {
%3 = icmp sgt <8 x i16> %0, %1
%4 = sext <8 x i1> %3 to <8 x i16>
%5 = bitcast <8 x i16> %4 to <16 x i8>
%6 = icmp slt <16 x i8> %5, zeroinitializer
%7 = bitcast <16 x i1> %6 to i16
%8 = zext i16 %7 to i32
ret i32 %8
}
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20181209/5efdd302/attachment.html>
More information about the llvm-bugs
mailing list