12
12
#include <stdlib.h>
13
13
#include <string.h>
14
14
15
+ typedef struct ValueProfNode {
16
+ __llvm_profile_value_data VData ;
17
+ struct ValueProfNode * Next ;
18
+ } ValueProfNode ;
19
+
15
20
__attribute__((visibility ("hidden" ))) uint64_t __llvm_profile_get_magic (void ) {
16
21
/* Magic number to detect file format and endianness.
17
22
*
@@ -54,14 +59,16 @@ __attribute__((visibility("hidden"))) void __llvm_profile_reset_counters(void) {
54
59
for (DI = DataBegin ; DI != DataEnd ; ++ DI ) {
55
60
uint64_t CurrentVSiteCount = 0 ;
56
61
uint32_t VKI , i ;
57
- if (!DI -> ValueCounters )
62
+ if (!DI -> Values )
58
63
continue ;
59
64
60
- for (VKI = VK_FIRST ; VKI <= VK_LAST ; ++ VKI )
65
+ ValueProfNode * * ValueCounters = (ValueProfNode * * )DI -> Values ;
66
+
67
+ for (VKI = IPVK_First ; VKI <= IPVK_Last ; ++ VKI )
61
68
CurrentVSiteCount += DI -> NumValueSites [VKI ];
62
69
63
70
for (i = 0 ; i < CurrentVSiteCount ; ++ i ) {
64
- __llvm_profile_value_node * CurrentVNode = DI -> ValueCounters [i ];
71
+ ValueProfNode * CurrentVNode = ValueCounters [i ];
65
72
66
73
while (CurrentVNode ) {
67
74
CurrentVNode -> VData .NumTaken = 0 ;
@@ -91,14 +98,14 @@ __llvm_profile_instrument_target(uint64_t TargetValue, void *Data_,
91
98
static int allocateValueProfileCounters (__llvm_profile_data * Data ) {
92
99
uint64_t NumVSites = 0 ;
93
100
uint32_t VKI ;
94
- for (VKI = VK_FIRST ; VKI <= VK_LAST ; ++ VKI )
101
+ for (VKI = IPVK_First ; VKI <= IPVK_Last ; ++ VKI )
95
102
NumVSites += Data -> NumValueSites [VKI ];
96
103
97
- __llvm_profile_value_node * * Mem = ( __llvm_profile_value_node * * ) calloc (
98
- NumVSites , sizeof (__llvm_profile_value_node * ));
104
+ ValueProfNode * * Mem =
105
+ ( ValueProfNode * * ) calloc ( NumVSites , sizeof (ValueProfNode * ));
99
106
if (!Mem )
100
107
return 0 ;
101
- if (!__sync_bool_compare_and_swap (& Data -> ValueCounters , 0 , Mem )) {
108
+ if (!__sync_bool_compare_and_swap (& Data -> Values , 0 , Mem )) {
102
109
free (Mem );
103
110
return 0 ;
104
111
}
@@ -113,20 +120,21 @@ static int allocateValueProfileCounters(__llvm_profile_data *Data) {
113
120
}
114
121
115
122
__attribute__((visibility ("hidden" ))) void
116
- __llvm_profile_instrument_target (uint64_t TargetValue , void * Data_ ,
123
+ __llvm_profile_instrument_target (uint64_t TargetValue , void * Data ,
117
124
uint32_t CounterIndex ) {
118
125
119
- __llvm_profile_data * Data = (__llvm_profile_data * )Data_ ;
120
- if (!Data )
126
+ __llvm_profile_data * VData = (__llvm_profile_data * )Data ;
127
+ if (!VData )
121
128
return ;
122
129
123
- if (!Data -> ValueCounters ) {
124
- if (!allocateValueProfileCounters (Data ))
130
+ if (!VData -> Values ) {
131
+ if (!allocateValueProfileCounters (VData ))
125
132
return ;
126
133
}
127
134
128
- __llvm_profile_value_node * PrevVNode = NULL ;
129
- __llvm_profile_value_node * CurrentVNode = Data -> ValueCounters [CounterIndex ];
135
+ ValueProfNode * * ValueCounters = (ValueProfNode * * )VData -> Values ;
136
+ ValueProfNode * PrevVNode = NULL ;
137
+ ValueProfNode * CurrentVNode = ValueCounters [CounterIndex ];
130
138
131
139
uint8_t VDataCount = 0 ;
132
140
while (CurrentVNode ) {
@@ -142,27 +150,25 @@ __llvm_profile_instrument_target(uint64_t TargetValue, void *Data_,
142
150
if (VDataCount >= UCHAR_MAX )
143
151
return ;
144
152
145
- CurrentVNode =
146
- (__llvm_profile_value_node * )calloc (1 , sizeof (__llvm_profile_value_node ));
153
+ CurrentVNode = (ValueProfNode * )calloc (1 , sizeof (ValueProfNode ));
147
154
if (!CurrentVNode )
148
155
return ;
149
156
150
157
CurrentVNode -> VData .TargetValue = TargetValue ;
151
158
CurrentVNode -> VData .NumTaken ++ ;
152
159
153
160
uint32_t Success = 0 ;
154
- if (!Data -> ValueCounters [CounterIndex ])
155
- Success = __sync_bool_compare_and_swap (& ( Data -> ValueCounters [CounterIndex ]) ,
156
- 0 , CurrentVNode );
161
+ if (!ValueCounters [CounterIndex ])
162
+ Success = __sync_bool_compare_and_swap (& ValueCounters [CounterIndex ], 0 ,
163
+ CurrentVNode );
157
164
else if (PrevVNode && !PrevVNode -> Next )
158
165
Success = __sync_bool_compare_and_swap (& (PrevVNode -> Next ), 0 , CurrentVNode );
159
166
160
167
if (!Success ) {
161
168
free (CurrentVNode );
162
169
return ;
163
170
}
164
- __sync_fetch_and_add (& TotalValueDataSize ,
165
- Success * sizeof (__llvm_profile_value_data ));
171
+ __sync_fetch_and_add (& TotalValueDataSize , Success * sizeof (ValueProfNode ));
166
172
}
167
173
#endif
168
174
@@ -187,10 +193,12 @@ __llvm_profile_gather_value_data(uint8_t **VDataArray) {
187
193
uint64_t NumVSites = 0 ;
188
194
uint32_t VKI , i ;
189
195
190
- if (!I -> ValueCounters )
196
+ if (!I -> Values )
191
197
continue ;
192
198
193
- for (VKI = VK_FIRST ; VKI <= VK_LAST ; ++ VKI )
199
+ ValueProfNode * * ValueCounters = (ValueProfNode * * )I -> Values ;
200
+
201
+ for (VKI = IPVK_First ; VKI <= IPVK_Last ; ++ VKI )
194
202
NumVSites += I -> NumValueSites [VKI ];
195
203
uint8_t Padding = __llvm_profile_get_num_padding_bytes (NumVSites );
196
204
@@ -200,7 +208,7 @@ __llvm_profile_gather_value_data(uint8_t **VDataArray) {
200
208
201
209
for (i = 0 ; i < NumVSites ; ++ i ) {
202
210
203
- __llvm_profile_value_node * VNode = I -> ValueCounters [i ];
211
+ ValueProfNode * VNode = ValueCounters [i ];
204
212
205
213
uint8_t VDataCount = 0 ;
206
214
while (VNode && ((uint8_t * )(VDataPtr + 1 ) <= VDataEnd )) {
@@ -213,7 +221,7 @@ __llvm_profile_gather_value_data(uint8_t **VDataArray) {
213
221
* PerSiteCountPtr = VDataCount ;
214
222
++ PerSiteCountPtr ;
215
223
}
216
- I -> ValueCounters = (void * )PerSiteCountsHead ;
224
+ I -> Values = (void * )PerSiteCountsHead ;
217
225
PerSiteCountsHead = (uint8_t * )VDataPtr ;
218
226
}
219
227
return PerSiteCountsHead - * VDataArray ;
0 commit comments