From e2dd12ab66d14ac76a92b4538af81f8361132ba0 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sat, 13 Nov 2021 15:20:00 +0100 Subject: 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. --- gcc/attr-fnspec.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'gcc/attr-fnspec.h') 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 (); -- cgit v1.1