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 /* Return callgraph node REF is referring. */ 22 static inline struct cgraph_node * 23 ipa_ref_node (struct ipa_ref *ref) 24 { 25 return cgraph (ref->referred); 26 } 27 28 /* Return varpool node REF is referring. */ 29 30 static inline struct varpool_node * 31 ipa_ref_varpool_node (struct ipa_ref *ref) 32 { 33 return varpool (ref->referred); 34 } 35 36 /* Return cgraph node REF is in. */ 37 38 static inline struct cgraph_node * 39 ipa_ref_referring_node (struct ipa_ref *ref) 40 { 41 return cgraph (ref->referring); 42 } 43 44 /* Return varpool node REF is in. */ 45 46 static inline struct varpool_node * 47 ipa_ref_referring_varpool_node (struct ipa_ref *ref) 48 { 49 return varpool (ref->referring); 50 } 51 52 /* Return reference list REF is in. */ 53 54 static inline struct ipa_ref_list * 55 ipa_ref_referring_ref_list (struct ipa_ref *ref) 56 { 57 return &ref->referring->symbol.ref_list; 58 } 59 60 /* Return reference list REF is in. */ 61 62 static inline struct ipa_ref_list * 63 ipa_ref_referred_ref_list (struct ipa_ref *ref) 64 { 65 return &ref->referred->symbol.ref_list; 66 } 67 68 /* Return first reference in LIST or NULL if empty. */ 69 70 static inline struct ipa_ref * 71 ipa_ref_list_first_reference (struct ipa_ref_list *list) 72 { 73 if (!vec_safe_length (list->references)) 74 return NULL; 75 return &(*list->references)[0]; 76 } 77 78 /* Return first referring ref in LIST or NULL if empty. */ 79 80 static inline struct ipa_ref * 81 ipa_ref_list_first_referring (struct ipa_ref_list *list) 82 { 83 if (!list->referring.length ()) 84 return NULL; 85 return list->referring[0]; 86 } 87 88 /* Clear reference list. */ 89 90 static inline void 91 ipa_empty_ref_list (struct ipa_ref_list *list) 92 { 93 list->referring.create (0); 94 list->references = NULL; 95 } 96 97 /* Clear reference list. */ 98 99 static inline unsigned int 100 ipa_ref_list_nreferences (struct ipa_ref_list *list) 101 { 102 return vec_safe_length (list->references); 103 } 104 105 #define ipa_ref_list_reference_iterate(L,I,P) \ 106 vec_safe_iterate ((L)->references, (I), &(P)) 107 #define ipa_ref_list_referring_iterate(L,I,P) \ 108 (L)->referring.iterate ((I), &(P)) 109