Hi! Some arm options are unfortunately the only exception when store_merge predicate is true even on a target with STRICT_ALIGNMENT, in which case we can't really do what the testcase wants to test, an unaligned store covering the 3 separate stores. There are other testcases that already have to apply arm workarounds.
Fixed thusly, committed as obvious to trunk. 2019-05-10 Jakub Jelinek <ja...@redhat.com> PR tree-optimization/88709 PR tree-optimization/90271 * gcc.dg/store_merging_29.c: Allow 4 stores to replace 6 stores on arm*-*-*. --- gcc/testsuite/gcc.dg/store_merging_29.c.jj 2019-05-06 23:49:33.378041182 +0200 +++ gcc/testsuite/gcc.dg/store_merging_29.c 2019-05-09 16:27:49.053535179 +0200 @@ -2,8 +2,8 @@ /* { dg-do run { target int32 } } */ /* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging-details" } */ -/* { dg-final { scan-tree-dump "New sequence of 3 stores to replace old one of 6 stores" "store-merging" { target le } } } */ -/* { dg-final { scan-tree-dump "New sequence of \[34] stores to replace old one of 6 stores" "store-merging" { target be } } } */ +/* { dg-final { scan-tree-dump "New sequence of 3 stores to replace old one of 6 stores" "store-merging" { target { le && { ! arm*-*-* } } } } } */ +/* { dg-final { scan-tree-dump "New sequence of \[34] stores to replace old one of 6 stores" "store-merging" { target { be || { arm*-*-* } } } } } */ struct T { char a[1024]; }; Jakub