[Bug target/80689] 128 loads generated for structure copying with gcc 7.1.0 and leads to STLF stalls in avx2 targets.
venkataramanan.kumar at amd dot com
gcc-bugzilla@gcc.gnu.org
Tue May 9 10:37:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80689
--- Comment #2 from Venkataramanan <venkataramanan.kumar at amd dot com> ---
(In reply to Richard Biener from comment #1)
> That you use noinline tells that glibc memcpy has the very same issue. Note
> that similarly having bytes/shorts in the structure and using longs or ints
> to implement inlined memcpy has the same issue.
>
> So I don't see how to easily fix this, or rather I don't think we can fix it
> at all apart from the case where we can see both the struct copy and previous
> stores to the source (thus when you enable inlining).
Actual benchmark from where I made the small test case is compiled with in
lining enabled.
Just to show at the calling place "test" function, all stores happen in scalar
mode (4 * 64), I used -fno-inline. Otherwise function "Set" gets inlined.
(snip)
movq %rsi, (%rsp)
movq %rdi, %rsi
movq %rsp, %rdi
movq %rdx, 8(%rsp)
movq %rcx, 16(%rsp)
movq %r8, 24(%rsp)
call Set
addq $40, %rsp
(snip)
More information about the Gcc-bugs
mailing list