Issue |
80388
|
Summary |
[AArch64][ISel] Better instruction select when load/store?
|
Labels |
backend:AArch64,
llvm:codegen,
llvm:globalisel,
llvm:SelectionDAG
|
Assignees |
|
Reporter |
hstk30-hw
|
https://godbolt.org/z/4fGa3xd7o
```
#include <string.h>
#include<stdio.h>
#include <stdint.h>
typedef uint32_t u32;
void *copy(void *restrict dest, const void *restrict src, size_t n)
{
unsigned char *d = dest;
const unsigned char *s = src;
uint32_t w, x;
if ((uintptr_t)d % 4 == 0) {
for (; n>=16; s+=16, d+=16, n-=16) {
*(u32 *)(d+0) = *(u32 *)(s+0);
*(u32 *)(d+4) = *(u32 *)(s+4);
*(u32 *)(d+8) = *(u32 *)(s+8);
*(u32 *)(d+12) = *(u32 *)(s+12);
}
return dest;
}
return dest;
}
```
In this case, GCC load 8 + 8 bytes in loop, but Clang load 4 + 8 + 4 in loop.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs