From e7e444390f931238f09524973e93d4519ee231f1 Mon Sep 17 00:00:00 2001 From: rguenth Date: Fri, 21 Mar 2014 11:52:50 +0000 Subject: 2014-03-21 Richard Biener 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208746 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/tree.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'gcc/tree.h') diff --git a/gcc/tree.h b/gcc/tree.h index 71d68321a55..9fbc5c4ec2c 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -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. */ -- cgit v1.2.1