aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-into-ssa.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-08-29 14:12:25 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-08-29 14:12:25 +0000
commit6214d5c7e7470bdd5ecbeae668c2522551bfebbc (patch)
tree7abbd12de9fe52419e5e7738b933a729107ffe6e /gcc/tree-into-ssa.c
parent66e5825973556c8db6fc2cf19179397506b0b101 (diff)
downloadgcc-6214d5c7e7470bdd5ecbeae668c2522551bfebbc.zip
gcc-6214d5c7e7470bdd5ecbeae668c2522551bfebbc.tar.gz
gcc-6214d5c7e7470bdd5ecbeae668c2522551bfebbc.tar.bz2
tree-core.h: Document use of deprecated_flag in SSA_NAME.
2018-08-29 Richard Biener <rguenther@suse.de> * tree-core.h: Document use of deprecated_flag in SSA_NAME. * tree.h (SSA_NAME_POINTS_TO_READONLY_MEMORY): Define. * tree-into-ssa.c (pass_build_ssa::execute): Initialize function parameters SSA_NAME_POINTS_TO_READONLY_MEMORY from fnspec. * tree-ssa-sccvn.c (const_parms, init_const_parms): Remove. (vn_reference_lookup_3): Remove use of const_parms. (free_rpo_vn): Do not free const_parms. (do_rpo_vn): Do not call init_const_parms. * tree-ssa-alias.c (refs_may_alias_p_1): Honor SSA_NAME_POINTS_TO_READONLY_MEMORY. (call_may_clobber_ref_p_1): Likewise. From-SVN: r263958
Diffstat (limited to 'gcc/tree-into-ssa.c')
-rw-r--r--gcc/tree-into-ssa.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c
index f4af33c..cdae75d 100644
--- a/gcc/tree-into-ssa.c
+++ b/gcc/tree-into-ssa.c
@@ -2490,6 +2490,28 @@ pass_build_ssa::execute (function *fun)
SET_SSA_NAME_VAR_OR_IDENTIFIER (name, DECL_NAME (decl));
}
+ /* Initialize SSA_NAME_POINTS_TO_READONLY_MEMORY. */
+ tree fnspec = lookup_attribute ("fn spec",
+ TYPE_ATTRIBUTES (TREE_TYPE (fun->decl)));
+ if (fnspec)
+ {
+ fnspec = TREE_VALUE (TREE_VALUE (fnspec));
+ unsigned i = 1;
+ for (tree arg = DECL_ARGUMENTS (cfun->decl);
+ arg; arg = DECL_CHAIN (arg), ++i)
+ {
+ if (i >= (unsigned) TREE_STRING_LENGTH (fnspec))
+ break;
+ if (TREE_STRING_POINTER (fnspec)[i] == 'R'
+ || TREE_STRING_POINTER (fnspec)[i] == 'r')
+ {
+ tree name = ssa_default_def (fun, arg);
+ if (name)
+ SSA_NAME_POINTS_TO_READONLY_MEMORY (name) = 1;
+ }
+ }
+ }
+
return 0;
}