https://bugs.llvm.org/show_bug.cgi?id=41433
Bug ID: 41433
Summary: Some 2-vector vector select identity shuffles may be
better represented as moves
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Common Code Generator Code
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Split off from https://bugs.llvm.org/show_bug.cgi?id=41429
https://godbolt.org/z/_n1ggH
void example(__m256i * __restrict__ dest, const __m256i * __restrict__ a) {
(*dest)[2] = (*a)[2];
(*dest)[3] = (*a)[3];
}
Here we do not ever touch the low half of dest, and replace the high part
of dest with high part of `a`.
The naive asm could be:
vmovaps ymm0, ymmword ptr [rdi]
vblendps ymm0, ymm0, ymmword ptr [rsi], 240 # ymm0 =
ymm0[0,1,2,3],mem[4,5,6,7]
vmovaps ymmword ptr [rdi], ymm0
vzeroupper
But we can also produce:
vmovaps xmm0, xmmword ptr [rsi + 16]
vmovaps xmmword ptr [rdi + 16], xmm0
I'm not quite sure what are the exact criteria when that is profitable to do
though.
--
You are receiving this mail because:
You are on the CC list for the bug._______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs