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

Reply via email to