OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / ipa-ref-inline.h
1 /* IPA reference lists.
2    Copyright (C) 2010
3    Free Software Foundation, Inc.
4    Contributed by Jan Hubicka
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 /* Return callgraph node REF is refering.  */
23 static inline struct cgraph_node *
24 ipa_ref_node (struct ipa_ref *ref)
25 {
26   gcc_assert (ref->refered_type == IPA_REF_CGRAPH);
27   return ref->refered.cgraph_node;
28 }
29
30 /* Return varpool node REF is refering.  */
31
32 static inline struct varpool_node *
33 ipa_ref_varpool_node (struct ipa_ref *ref)
34 {
35   gcc_assert (ref->refered_type == IPA_REF_VARPOOL);
36   return ref->refered.varpool_node;
37 }
38
39 /* Return cgraph node REF is in.  */
40
41 static inline struct cgraph_node *
42 ipa_ref_refering_node (struct ipa_ref *ref)
43 {
44   gcc_assert (ref->refering_type == IPA_REF_CGRAPH);
45   return ref->refering.cgraph_node;
46 }
47
48 /* Return varpool node REF is in.  */
49
50 static inline struct varpool_node *
51 ipa_ref_refering_varpool_node (struct ipa_ref *ref)
52 {
53   gcc_assert (ref->refering_type == IPA_REF_VARPOOL);
54   return ref->refering.varpool_node;
55 }
56
57 /* Return reference list REF is in.  */
58
59 static inline struct ipa_ref_list *
60 ipa_ref_refering_ref_list (struct ipa_ref *ref)
61 {
62   if (ref->refering_type == IPA_REF_CGRAPH)
63     return &ipa_ref_refering_node (ref)->ref_list;
64   else
65     return &ipa_ref_refering_varpool_node (ref)->ref_list;
66 }
67
68 /* Return reference list REF is in.  */
69
70 static inline struct ipa_ref_list *
71 ipa_ref_refered_ref_list (struct ipa_ref *ref)
72 {
73   if (ref->refered_type == IPA_REF_CGRAPH)
74     return &ipa_ref_node (ref)->ref_list;
75   else
76     return &ipa_ref_varpool_node (ref)->ref_list;
77 }
78
79 /* Return first reference in LIST or NULL if empty.  */
80
81 static inline struct ipa_ref *
82 ipa_ref_list_first_reference (struct ipa_ref_list *list)
83 {
84   if (!VEC_length (ipa_ref_t, list->references))
85     return NULL;
86   return VEC_index (ipa_ref_t, list->references, 0);
87 }
88
89 /* Return first refering ref in LIST or NULL if empty.  */
90
91 static inline struct ipa_ref *
92 ipa_ref_list_first_refering (struct ipa_ref_list *list)
93 {
94   if (!VEC_length (ipa_ref_ptr, list->refering))
95     return NULL;
96   return VEC_index (ipa_ref_ptr, list->refering, 0);
97 }
98
99 /* Clear reference list.  */
100
101 static inline void
102 ipa_empty_ref_list (struct ipa_ref_list *list)
103 {
104   list->refering = NULL;
105   list->references = NULL;
106 }
107
108 /* Clear reference list.  */
109
110 static inline unsigned int
111 ipa_ref_list_nreferences (struct ipa_ref_list *list)
112 {
113   return VEC_length (ipa_ref_t, list->references);
114 }
115
116 #define ipa_ref_list_reference_iterate(L,I,P) \
117    VEC_iterate(ipa_ref_t, (L)->references, (I), (P))
118 #define ipa_ref_list_refering_iterate(L,I,P) \
119    VEC_iterate(ipa_ref_ptr, (L)->refering, (I), (P))