From d119f34c952f8718fdbabc63e2f369a16e92fa07 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 20 Sep 2020 07:25:16 +0200 Subject: New modref/ipa_modref optimization passes 2020-09-19 David Cepelik Jan Hubicka * Makefile.in: Add ipa-modref.c and ipa-modref-tree.c. * alias.c: (reference_alias_ptr_type_1): Export. * alias.h (reference_alias_ptr_type_1): Declare. * common.opt (fipa-modref): New. * gengtype.c (open_base_files): Add ipa-modref-tree.h and ipa-modref.h * ipa-modref-tree.c: New file. * ipa-modref-tree.h: New file. * ipa-modref.c: New file. * ipa-modref.h: New file. * lto-section-in.c (lto_section_name): Add ipa_modref. * lto-streamer.h (enum lto_section_type): Add LTO_section_ipa_modref. * opts.c (default_options_table): Enable ipa-modref at -O1+. * params.opt (-param=modref-max-bases, -param=modref-max-refs, -param=modref-max-tests): New params. * passes.def: Schedule pass_modref and pass_ipa_modref. * timevar.def (TV_IPA_MODREF): New timevar. (TV_TREE_MODREF): New timevar. * tree-pass.h (make_pass_modref): Declare. (make_pass_ipa_modref): Declare. * tree-ssa-alias.c (dump_alias_stats): Include ipa-modref-tree.h and ipa-modref.h (alias_stats): Add modref_use_may_alias, modref_use_no_alias, modref_clobber_may_alias, modref_clobber_no_alias, modref_tests. (dump_alias_stats): Dump new stats. (nonoverlapping_array_refs_p): Fix formating. (modref_may_conflict): New function. (ref_maybe_used_by_call_p_1): Use it. (call_may_clobber_ref_p_1): Use it. (call_may_clobber_ref_p): Update. (stmt_may_clobber_ref_p_1): Update. * tree-ssa-alias.h (call_may_clobber_ref_p_1): Update. --- gcc/ipa-modref.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 gcc/ipa-modref.h (limited to 'gcc/ipa-modref.h') diff --git a/gcc/ipa-modref.h b/gcc/ipa-modref.h new file mode 100644 index 0000000..6f97920 --- /dev/null +++ b/gcc/ipa-modref.h @@ -0,0 +1,48 @@ +/* Search for references that a functions loads or stores. + Copyright (C) 2019 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#ifndef IPA_MODREF_H +#define IPA_MODREF_H + +typedef modref_tree modref_records; +typedef modref_tree modref_records_lto; + +/* Single function summary. */ + +struct GTY(()) modref_summary +{ + /* Load and stores in function (transitively closed to all callees) */ + modref_records *loads; + modref_records *stores; + + /* The same but using tree types rather than alias sets. This is necessary + to make the information streamable for LTO but is also more verbose + and thus more likely to hit the limits. */ + modref_records_lto *loads_lto; + modref_records_lto *stores_lto; + bool finished; + + modref_summary (); + ~modref_summary (); + void dump (FILE *); +}; + +modref_summary *get_modref_function_summary (cgraph_node *func); + +#endif -- cgit v1.1