1 /* IPA reference lists. 2 Copyright (C) 2010-2013 Free Software Foundation, Inc. 3 Contributed by Jan Hubicka 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it under 8 the terms of the GNU General Public License as published by the Free 9 Software Foundation; either version 3, or (at your option) any later 10 version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21 struct cgraph_node; 22 struct varpool_node; 23 union symtab_node_def; 24 typedef union symtab_node_def *symtab_node; 25 typedef const union symtab_node_def *const_symtab_node; 26 27 28 /* How the reference is done. */ 29 enum 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. */ 38 struct 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 47 typedef struct ipa_ref ipa_ref_t; 48 typedef struct ipa_ref *ipa_ref_ptr; 49 50 51 /* List of references. This is stored in both callgraph and varpool nodes. */ 52 struct 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 61 struct ipa_ref * ipa_record_reference (symtab_node, 62 symtab_node, 63 enum ipa_ref_use, gimple); 64 65 void ipa_remove_reference (struct ipa_ref *); 66 void ipa_remove_all_references (struct ipa_ref_list *); 67 void ipa_remove_all_referring (struct ipa_ref_list *); 68 void ipa_dump_references (FILE *, struct ipa_ref_list *); 69 void ipa_dump_referring (FILE *, struct ipa_ref_list *); 70 void ipa_clone_references (symtab_node, struct ipa_ref_list *); 71 void ipa_clone_referring (symtab_node, struct ipa_ref_list *); 72 bool ipa_ref_cannot_lead_to_return (struct ipa_ref *); 73 bool ipa_ref_has_aliases_p (struct ipa_ref_list *); 74