[Bug middle-end/94703] Small-sized memcpy leading to unnecessary register spillage unless done through a dummy union
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri May 8 11:19:07 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94703
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Rainer Orth from comment #7)
> Created attachment 48483 [details]
> 32-bit sparc-sun-solaris2.11 pr94703.c.021t.ssa
>
> The new testcase FAILs on sparc-sun-solaris2.11 (both 32 and 64-bit):
>
> +FAIL: gcc.dg/tree-ssa/pr94703.c scan-tree-dump ssa "No longer having
> address taken: r"
Hmm, OK looks like memcpy is not folded, likely because the source is
not known to be appropriately aligned.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr94703.c
b/gcc/testsuite/gcc.dg/tree-ssa/pr94703.c
index 7209fa0a4d4..eadea45a32f 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr94703.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr94703.c
@@ -4,6 +4,7 @@
unsigned int set_lowpart (unsigned int const *X)
{
unsigned int r = 0;
+ X = __builtin_assume_aligned (X, sizeof (unsigned int) / 2);
__builtin_memcpy(&r,X,sizeof (unsigned int) / 2);
return r;
}
should fix this. Can you verify and if so, commit? Thx.
More information about the Gcc-bugs
mailing list