Commit 06658c6d by Senthil Kumar Selvaraj Committed by Senthil Kumar Selvaraj

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
parent e525d611
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.
......
/* { 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 {
......
/* { 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
......
/* { 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
......
/* { 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
......
/* { 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. */
......
/* { 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.
......
/* { 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 {
......
......@@ -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
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment