diff options
author | Jan Hubicka <jh@suse.cz> | 2021-11-13 15:20:00 +0100 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2021-11-13 15:20:00 +0100 |
commit | e2dd12ab66d14ac76a92b4538af81f8361132ba0 (patch) | |
tree | cee2ae844d596479c28b09dfa893bd4828ed2aea /gcc/attr-fnspec.h | |
parent | b7a23949b0dcc4205fcc2be6b84b91441faa384d (diff) | |
download | gcc-e2dd12ab66d14ac76a92b4538af81f8361132ba0.zip gcc-e2dd12ab66d14ac76a92b4538af81f8361132ba0.tar.gz gcc-e2dd12ab66d14ac76a92b4538af81f8361132ba0.tar.bz2 |
Remember fnspec based EAF flags in modref summary.
gcc/ChangeLog:
* attr-fnspec.h (attr_fnspec::arg_eaf_flags): Break out from ...
* gimple.c (gimple_call_arg_flags): ... here.
* ipa-modref.c (analyze_parms): Record flags known from fnspec.
(modref_merge_call_site_flags): Use arg_eaf_flags.
Diffstat (limited to 'gcc/attr-fnspec.h')
-rw-r--r-- | gcc/attr-fnspec.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/attr-fnspec.h b/gcc/attr-fnspec.h index 1154c30..cd618cb 100644 --- a/gcc/attr-fnspec.h +++ b/gcc/attr-fnspec.h @@ -264,6 +264,29 @@ public: return str[1] == 'C' || str[1] == 'P'; } + /* Return EAF flags for arg I. */ + int + arg_eaf_flags (unsigned int i) + { + int flags = 0; + + if (!arg_specified_p (i)) + ; + else if (!arg_used_p (i)) + flags = EAF_UNUSED; + else + { + if (arg_direct_p (i)) + flags |= EAF_NO_INDIRECT_READ | EAF_NO_INDIRECT_ESCAPE + | EAF_NOT_RETURNED_INDIRECTLY | EAF_NO_INDIRECT_CLOBBER; + if (arg_noescape_p (i)) + flags |= EAF_NO_DIRECT_ESCAPE | EAF_NO_INDIRECT_ESCAPE; + if (arg_readonly_p (i)) + flags |= EAF_NO_DIRECT_CLOBBER | EAF_NO_INDIRECT_CLOBBER; + } + return flags; + } + /* Check validity of the string. */ void verify (); |