[llvm-bugs] [Bug 43664] New: Missed vectorization for std::reverse
via llvm-bugs
llvm-bugs at lists.llvm.org
Sun Oct 13 13:42:54 PDT 2019
https://bugs.llvm.org/show_bug.cgi?id=43664
Bug ID: 43664
Summary: Missed vectorization for std::reverse
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Loop Optimizer
Assignee: unassignedbugs at nondot.org
Reporter: david.bolvansky at gmail.com
CC: llvm-bugs at lists.llvm.org
#include <algorithm>
#include <vector>
#include <cstdint>
void reverse_epi8(std::vector<int32_t>&v) {
std::reverse(v.begin(),v.begin()+32);
}
void reverse_epi32(std::vector<int32_t>& v) {
std::reverse(v.begin(),v.begin()+32);
}
Clang does not vectorize std::reverse with -O3 -march=haswell -std=c++11.
reverse_epi8(std::vector<int, std::allocator<int> >&): #
@reverse_epi8(std::vector<int, std::allocator<int> >&)
mov rax, qword ptr [rdi]
lea rcx, [rax + 124]
add rax, 4
.LBB0_1: # =>This Inner Loop Header: Depth=1
mov edx, dword ptr [rax - 4]
mov esi, dword ptr [rcx]
mov dword ptr [rax - 4], esi
mov dword ptr [rcx], edx
add rcx, -4
cmp rax, rcx
lea rax, [rax + 4]
jb .LBB0_1
ret
GCC 8+ vectorizes it.
reverse_epi8(std::vector<int, std::allocator<int> >&):
mov rax, QWORD PTR [rdi]
vmovdqa ymm0, YMMWORD PTR .LC0[rip]
vmovdqu ymm1, YMMWORD PTR [rax]
vpermd ymm2, ymm0, YMMWORD PTR [rax+96]
vpermd ymm1, ymm0, ymm1
vmovdqu YMMWORD PTR [rax], ymm2
vpermd ymm2, ymm0, YMMWORD PTR [rax+64]
vmovdqu YMMWORD PTR [rax+96], ymm1
vmovdqu ymm1, YMMWORD PTR [rax+32]
vmovdqu YMMWORD PTR [rax+32], ymm2
vpermd ymm0, ymm0, ymm1
vmovdqu YMMWORD PTR [rax+64], ymm0
vzeroupper
ret
https://godbolt.org/z/gJkt3c
Another issue, with std::reverse(v.begin(), v.begin()+2), there is really bad
codegen:
https://godbolt.org/z/D-k-SA
--
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/20191013/1e50a805/attachment.html>
More information about the llvm-bugs
mailing list