1/* IPA reference lists. 2 Copyright (C) 2010-2013 Free Software Foundation, Inc. 3 Contributed by Jan Hubicka 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 3, or (at your option) any later 10version. 11 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING3. If not see 19<http://www.gnu.org/licenses/>. */ 20 21struct cgraph_node; 22struct varpool_node; 23union symtab_node_def; 24typedef union symtab_node_def *symtab_node; 25typedef const union symtab_node_def *const_symtab_node; 26 27 28/* How the reference is done. */ 29enum GTY(()) ipa_ref_use 30{ 31 IPA_REF_LOAD, 32 IPA_REF_STORE, 33 IPA_REF_ADDR, 34 IPA_REF_ALIAS 35}; 36 37/* Record of reference in callgraph or varpool. */ 38struct GTY(()) ipa_ref 39{ 40 symtab_node referring; 41 symtab_node referred; 42 gimple stmt; 43 unsigned int referred_index; 44 ENUM_BITFIELD (ipa_ref_use) use:2; 45}; 46 47typedef struct ipa_ref ipa_ref_t; 48typedef struct ipa_ref *ipa_ref_ptr; 49 50 51/* List of references. This is stored in both callgraph and varpool nodes. */ 52struct GTY(()) ipa_ref_list 53{ 54 /* Store actual references in references vector. */ 55 vec<ipa_ref_t, va_gc> *references; 56 /* Referring is vector of pointers to references. It must not live in GGC space 57 or GGC will try to mark middle of references vectors. */ 58 vec<ipa_ref_ptr> GTY((skip)) referring; 59}; 60 61struct ipa_ref * ipa_record_reference (symtab_node, 62 symtab_node, 63 enum ipa_ref_use, gimple); 64 65void ipa_remove_reference (struct ipa_ref *); 66void ipa_remove_all_references (struct ipa_ref_list *); 67void ipa_remove_all_referring (struct ipa_ref_list *); 68void ipa_dump_references (FILE *, struct ipa_ref_list *); 69void ipa_dump_referring (FILE *, struct ipa_ref_list *); 70void ipa_clone_references (symtab_node, struct ipa_ref_list *); 71void ipa_clone_referring (symtab_node, struct ipa_ref_list *); 72bool ipa_ref_cannot_lead_to_return (struct ipa_ref *); 73bool ipa_ref_has_aliases_p (struct ipa_ref_list *); 74