]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/60577 (inefficient FDO instrumentation code)
authorRichard Biener <rguenther@suse.de>
Fri, 21 Mar 2014 11:52:50 +0000 (11:52 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 21 Mar 2014 11:52:50 +0000 (11:52 +0000)
2014-03-21  Richard Biener  <rguenther@suse.de>

PR tree-optimization/60577
* tree-core.h (struct tree_base): Document nothrow_flag use
in VAR_DECL_NONALIASED.
* tree.h (VAR_DECL_NONALIASED): New.
(may_be_aliased): Adjust.
* coverage.c (build_var): Set VAR_DECL_NONALIASED.

* gcc.dg/tree-ssa/ssa-lim-11.c: New testcase.

From-SVN: r208746

gcc/ChangeLog
gcc/coverage.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-11.c [new file with mode: 0644]
gcc/tree-core.h
gcc/tree.h

index dc03b1d6058d282dfe29911821ef06512b85ace3..be0c8c484474c761502eb40838825a6f533b0801 100644 (file)
@@ -1,3 +1,12 @@
+2014-03-21  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60577
+       * tree-core.h (struct tree_base): Document nothrow_flag use
+       in VAR_DECL_NONALIASED.
+       * tree.h (VAR_DECL_NONALIASED): New.
+       (may_be_aliased): Adjust.
+       * coverage.c (build_var): Set VAR_DECL_NONALIASED.
+
 2014-03-20  Eric Botcazou  <ebotcazou@adacore.com>
 
        * expr.c (expand_expr_real_1): Remove outdated comment.
index 8b62403d121ead4c39b942900a9ff2f4c0b407f9..4c06fa47908cec214c30b3acc4ee65e230dab787 100644 (file)
@@ -721,6 +721,7 @@ build_var (tree fn_decl, tree type, int counter)
   DECL_NAME (var) = get_identifier (buf);
   TREE_STATIC (var) = 1;
   TREE_ADDRESSABLE (var) = 1;
+  DECL_NONALIASED (var) = 1;
   DECL_ALIGN (var) = TYPE_ALIGN (type);
 
   return var;
index 611ccb4b0fdc595f41cb0bcb85215761dc9aa285..aac3dc95c67b03931d933f0e56040339b98408d5 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-21  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/60577
+       * gcc.dg/tree-ssa/ssa-lim-11.c: New testcase.
+
 2014-03-21  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/60599
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-11.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-11.c
new file mode 100644 (file)
index 0000000..ea91a61
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fprofile-arcs -fdump-tree-lim1-details" } */
+
+struct thread_param
+{
+  long* buf;
+  long iterations;
+  long accesses;
+} param;
+
+void access_buf(struct thread_param* p)
+{
+  long i,j;
+  long iterations = p->iterations;
+  long accesses = p->accesses;
+  for (i=0; i<iterations; i++)
+    {
+      long* pbuf = p->buf;
+      for (j=0; j<accesses; j++)
+       pbuf[j] += 1;
+    }
+}
+
+/* { dg-final { scan-tree-dump-times "Executing store motion of __gcov0.access_buf\\\[\[01\]\\\] from loop 1" 2 "lim1" } } */
+/* { dg-final { cleanup-tree-dump "lim1" } } */
index a2dc387d647c6e9bdcda13313186b6bdb9573c2c..1719c7e664e704c97167fe202b878139ecbe7655 100644 (file)
@@ -987,6 +987,9 @@ struct GTY(()) tree_base {
        SSA_NAME_IN_FREELIST in
           SSA_NAME
 
+       VAR_DECL_NONALIASED in
+         VAR_DECL
+
    deprecated_flag:
 
        TREE_DEPRECATED in
index 71d68321a5500805f51f19d8670711e6f4f4608a..9fbc5c4ec2c3bf8adcfbc04a45ae4310af916293 100644 (file)
@@ -2441,6 +2441,10 @@ extern void decl_fini_priority_insert (tree, priority_type);
 #define DECL_NONLOCAL_FRAME(NODE)  \
   (VAR_DECL_CHECK (NODE)->base.default_def_flag)
 
+/* In a VAR_DECL, nonzero if this variable is not aliased by any pointer.  */
+#define DECL_NONALIASED(NODE) \
+  (VAR_DECL_CHECK (NODE)->base.nothrow_flag)
+
 /* This field is used to reference anything in decl.result and is meant only
    for use by the garbage collector.  */
 #define DECL_RESULT_FLD(NODE) \
@@ -4462,12 +4466,14 @@ static inline bool
 may_be_aliased (const_tree var)
 {
   return (TREE_CODE (var) != CONST_DECL
-         && !((TREE_STATIC (var) || TREE_PUBLIC (var) || DECL_EXTERNAL (var))
-              && TREE_READONLY (var)
-              && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (var)))
          && (TREE_PUBLIC (var)
              || DECL_EXTERNAL (var)
-             || TREE_ADDRESSABLE (var)));
+             || TREE_ADDRESSABLE (var))
+         && !((TREE_STATIC (var) || TREE_PUBLIC (var) || DECL_EXTERNAL (var))
+              && ((TREE_READONLY (var)
+                   && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (var)))
+                  || (TREE_CODE (var) == VAR_DECL
+                      && DECL_NONALIASED (var)))));
 }
 
 /* Return pointer to optimization flags of FNDECL.  */