[llvm-bugs] [Bug 27780] New: Inverted masks can be used for better codegen
via llvm-bugs
llvm-bugs at lists.llvm.org
Mon May 16 11:41:42 PDT 2016
https://llvm.org/bugs/show_bug.cgi?id=27780
Bug ID: 27780
Summary: Inverted masks can be used for better codegen
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: Backend: X86
Assignee: unassignedbugs at nondot.org
Reporter: mkuper at google.com
CC: llvm-bugs at lists.llvm.org
Classification: Unclassified
Given this IR:
define <32 x i8> @constant_pblendvb_avx2(<32 x i8> %xyzw, <32 x i8> %abcd) {
entry:
%select = select <32 x i1> <i1 false, i1 false, i1 true, i1 false, i1 true,
i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1
true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1
true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1
true, i1 true, i1 false>, <32 x i8> %xyzw, <32 x i8> %abcd
ret <32 x i8> %select
}
Up until r269676, with SSH4.1, we used to lower to:
movdqa %xmm0, %xmm4
movaps {{.*#+}} xmm0 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]
pblendvb %xmm2, %xmm4
pblendvb %xmm3, %xmm1
movdqa %xmm4, %xmm0
Now, we lower it to:
movdqa %xmm0, %xmm4
movaps {{.*#+}} xmm0 = [0,0,255,0,255,255,255,0,0,0,255,0,255,255,255,0]
pblendvb %xmm4, %xmm2
pblendvb %xmm1, %xmm3
movdqa %xmm2, %xmm0
movdqa %xmm3, %xmm1
This isn't directly related to r269676, it's just that the CG got lucky before.
The underlying issue is that when the output of the blend is constrained (in
this case, because the function's return value must live in xmm0 and xmm1) we
could invert the mask to avoid a copy.
--
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/20160516/374310d8/attachment-0001.html>
More information about the llvm-bugs
mailing list