diff options
author | Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> | 2016-11-08 06:30:31 +0000 |
---|---|---|
committer | Senthil Kumar Selvaraj <saaadhu@gcc.gnu.org> | 2016-11-08 06:30:31 +0000 |
commit | 06658c6d05b360dfb85b173d67975603d5e960f3 (patch) | |
tree | 1ce44e8ba76b8df2b77bf762ad455f78f96fd2ba /gcc | |
parent | e525d6110b1f2bef005f41130187c7252213d5c2 (diff) | |
download | gcc-06658c6d05b360dfb85b173d67975603d5e960f3.zip gcc-06658c6d05b360dfb85b173d67975603d5e960f3.tar.gz gcc-06658c6d05b360dfb85b173d67975603d5e960f3.tar.bz2 |
Fix bogus store_merging_x.c failures for avr.
Store merging isn't profitable for the avr. Add a new
effective target keyword "store_merge", and turn it on
only if non_strict_align *and* int32plus, as targets with
smallish word sizes are unlikely to profit from this optimization.
gcc/testsuite/ChangeLog
2016-11-03 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* gcc.dg/store_merging_1.c: Require store_merge.
* gcc.dg/store_merging_2.c: Likewise.
* gcc.dg/store_merging_4.c: Likewise.
* gcc.dg/store_merging_5.c: Likewise.
* gcc.dg/store_merging_6.c: Likewise.
* gcc.dg/store_merging_7.c: Likewise.
* gcc.dg/store_merging_8.c: Likewise.
* lib/target-supports.exp (check_effective_target_store_merge): New.
From-SVN: r241953
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/store_merging_1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/store_merging_2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/store_merging_4.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/store_merging_5.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/store_merging_6.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/store_merging_7.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/store_merging_8.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 14 |
9 files changed, 32 insertions, 7 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bb0d2c9..ba30991 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2016-11-08 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> + + * gcc.dg/store_merging_1.c: Require store_merge. + * gcc.dg/store_merging_2.c: Likewise. + * gcc.dg/store_merging_4.c: Likewise. + * gcc.dg/store_merging_5.c: Likewise. + * gcc.dg/store_merging_6.c: Likewise. + * gcc.dg/store_merging_7.c: Likewise. + * gcc.dg/store_merging_8.c: Likewise. + * lib/target-supports.exp (check_effective_target_store_merge): New. + 2016-11-07 David Edelsohn <dje.gcc@gmail.com> * gcc.target/powerpc/fold-vec-add-1.c: Add dg-options -maltivec. diff --git a/gcc/testsuite/gcc.dg/store_merging_1.c b/gcc/testsuite/gcc.dg/store_merging_1.c index 35f4d82..4cc43df 100644 --- a/gcc/testsuite/gcc.dg/store_merging_1.c +++ b/gcc/testsuite/gcc.dg/store_merging_1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-require-effective-target non_strict_align } */ +/* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging" } */ struct bar { diff --git a/gcc/testsuite/gcc.dg/store_merging_2.c b/gcc/testsuite/gcc.dg/store_merging_2.c index 8e2acf3..8cd29f4 100644 --- a/gcc/testsuite/gcc.dg/store_merging_2.c +++ b/gcc/testsuite/gcc.dg/store_merging_2.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target non_strict_align } */ +/* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging" } */ struct bar diff --git a/gcc/testsuite/gcc.dg/store_merging_4.c b/gcc/testsuite/gcc.dg/store_merging_4.c index a3d6769..719c2c0 100644 --- a/gcc/testsuite/gcc.dg/store_merging_4.c +++ b/gcc/testsuite/gcc.dg/store_merging_4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-require-effective-target non_strict_align } */ +/* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging" } */ /* Check that we can merge interleaving stores that are guaranteed diff --git a/gcc/testsuite/gcc.dg/store_merging_5.c b/gcc/testsuite/gcc.dg/store_merging_5.c index 4ffe512..e6c3497 100644 --- a/gcc/testsuite/gcc.dg/store_merging_5.c +++ b/gcc/testsuite/gcc.dg/store_merging_5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-require-effective-target non_strict_align } */ +/* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging" } */ /* Make sure that non-aliasing non-constant interspersed stores do not diff --git a/gcc/testsuite/gcc.dg/store_merging_6.c b/gcc/testsuite/gcc.dg/store_merging_6.c index 42b5c4f..314829d 100644 --- a/gcc/testsuite/gcc.dg/store_merging_6.c +++ b/gcc/testsuite/gcc.dg/store_merging_6.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target non_strict_align } */ +/* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging" } */ /* Check that we can widen accesses to bitfields. */ diff --git a/gcc/testsuite/gcc.dg/store_merging_7.c b/gcc/testsuite/gcc.dg/store_merging_7.c index 4be352f..c744ece 100644 --- a/gcc/testsuite/gcc.dg/store_merging_7.c +++ b/gcc/testsuite/gcc.dg/store_merging_7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-require-effective-target non_strict_align } */ +/* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging" } */ /* Check that we can merge consecutive array members through the pointer. diff --git a/gcc/testsuite/gcc.dg/store_merging_8.c b/gcc/testsuite/gcc.dg/store_merging_8.c index 15e80c7..e710a54 100644 --- a/gcc/testsuite/gcc.dg/store_merging_8.c +++ b/gcc/testsuite/gcc.dg/store_merging_8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-require-effective-target non_strict_align } */ +/* { dg-require-effective-target store_merge } */ /* { dg-options "-O2 -fdump-tree-store-merging" } */ struct baz { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 24a067d..b683c09 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -8107,3 +8107,17 @@ proc check_effective_target_divmod_simode { } { return [check_effective_target_divmod] } + +# Return 1 if store merging optimization is applicable for target. +# Store merging is not profitable for targets like the avr which +# can load/store only one byte at a time. Use int size as a proxy +# for the number of bytes the target can write, and skip for targets +# with a smallish (< 32) size. + +proc check_effective_target_store_merge { } { + if { [is-effective-target non_strict_align ] && [is-effective-target int32plus] } { + return 1 + } + + return 0 +} |