Message ID | orft3f7rms.fsf@lxoliva.fsfla.org |
---|---|
State | New |
Headers | show |
Series | add alignment to enable store merging in strict-alignment targets | expand |
On 1/5/21 12:46 AM, Alexandre Oliva wrote: > In g++.dg/opt/store-merging-2.C, the natural alignment of types T and > S is a single byte, so we shouldn't expect store merging on > strict-alignment platforms. Indeed, without something like the > adjust-alignment pass to bump up the alignment of the automatic > variable, as in GCC 10, the optimization does not occur. > > This patch adjusts the test so that the required alignment is > expressly stated, and so we don't rely on its accidentally being there > to get the desired optimization. > > Regstrapped on x86_64-linux-gnu, also tested on x-arm-wrs-vxworks7r2. > Ok to install? > > > for gcc/testsuite/ChangeLog > > * g++.dg/opt/store-merging-2.C: Add the required alignment. OK jeff
diff --git a/gcc/testsuite/g++.dg/opt/store-merging-2.C b/gcc/testsuite/g++.dg/opt/store-merging-2.C index 3c17033764b75..b1ad7018a1789 100644 --- a/gcc/testsuite/g++.dg/opt/store-merging-2.C +++ b/gcc/testsuite/g++.dg/opt/store-merging-2.C @@ -4,7 +4,9 @@ // { dg-options "-O2 -flifetime-dse=2 -fdump-tree-store-merging-details" } // { dg-final { scan-tree-dump "New sequence of 2 stores to replace old one of 3 stores" "store-merging" } } -struct T { char a[128]; }; +/* The alignment is necessary for store-merging to take place on + strict-alignment targets. */ +struct __attribute__ ((__aligned__ (4))) T { char a[128]; }; struct S { S () : a () { a.a[12] = 0; a.a[13] = 1; a.a[14] = 0; a.a[15] = 6; } T a; }; void foo (S &); void bar (void) { S s; foo (s); }