aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2020-10-31 08:56:40 +0100
committerJan Hubicka <jh@suse.cz>2020-10-31 08:56:40 +0100
commit617695cdc2b3d950f1e4deb5ea85d5cc302943f4 (patch)
treefe6fdf0e7adbdd1c1aaaac10cbcea3331f083182 /gcc/tree-ssa-alias.c
parent943cc2a1b70f2d755b4fed97b1c4b49234d92899 (diff)
downloadgcc-617695cdc2b3d950f1e4deb5ea85d5cc302943f4.zip
gcc-617695cdc2b3d950f1e4deb5ea85d5cc302943f4.tar.gz
gcc-617695cdc2b3d950f1e4deb5ea85d5cc302943f4.tar.bz2
Handle fnspec in local ipa-modref
* ipa-modref.c (modref_summary::dump): Dump writes_errno. (parm_map_for_arg): Break out from ... (merge_call_side_effects): ... here. (get_access_for_fnspec): New function. (process_fnspec): New function. (analyze_call): Use it. (analyze_stmt): Update. (analyze_function): Initialize writes_errno. (modref_summaries::duplicate): Duplicate writes_errno. * ipa-modref.h (struct modref_summary): Add writes_errno. * tree-ssa-alias.c (call_may_clobber_ref_p_1): Check errno.
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r--gcc/tree-ssa-alias.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index fe84baf..e64011d 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -2925,7 +2925,9 @@ call_may_clobber_ref_p_1 (gcall *call, ao_ref *ref, bool tbaa_p)
modref_summary *summary = get_modref_function_summary (node);
if (summary)
{
- if (!modref_may_conflict (call, summary->stores, ref, tbaa_p))
+ if (!modref_may_conflict (call, summary->stores, ref, tbaa_p)
+ && (!summary->writes_errno
+ || !targetm.ref_may_alias_errno (ref)))
{
alias_stats.modref_clobber_no_alias++;
if (dump_file && (dump_flags & TDF_DETAILS))