diff options
author | Richard Biener <rguenther@suse.de> | 2014-03-21 11:52:50 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-03-21 11:52:50 +0000 |
commit | 400a4f6ca21e539aecb66f570d769f4579a6482c (patch) | |
tree | f0a8757132cc149da091da8ed1fe7d71537f8744 /gcc/tree.h | |
parent | beeda1d9c4518d0d6ef02db935720c9628b82b6e (diff) | |
download | gcc-400a4f6ca21e539aecb66f570d769f4579a6482c.zip gcc-400a4f6ca21e539aecb66f570d769f4579a6482c.tar.gz gcc-400a4f6ca21e539aecb66f570d769f4579a6482c.tar.bz2 |
re PR tree-optimization/60577 (inefficient FDO instrumentation code)
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
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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. */ |