Home | History | Annotate | Download | only in include
      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