aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSenthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>2016-11-08 06:30:31 +0000
committerSenthil Kumar Selvaraj <saaadhu@gcc.gnu.org>2016-11-08 06:30:31 +0000
commit06658c6d05b360dfb85b173d67975603d5e960f3 (patch)
tree1ce44e8ba76b8df2b77bf762ad455f78f96fd2ba /gcc
parente525d6110b1f2bef005f41130187c7252213d5c2 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/testsuite/gcc.dg/store_merging_1.c2
-rw-r--r--gcc/testsuite/gcc.dg/store_merging_2.c2
-rw-r--r--gcc/testsuite/gcc.dg/store_merging_4.c2
-rw-r--r--gcc/testsuite/gcc.dg/store_merging_5.c2
-rw-r--r--gcc/testsuite/gcc.dg/store_merging_6.c2
-rw-r--r--gcc/testsuite/gcc.dg/store_merging_7.c2
-rw-r--r--gcc/testsuite/gcc.dg/store_merging_8.c2
-rw-r--r--gcc/testsuite/lib/target-supports.exp14
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
+}