@@ -160,10 +160,18 @@ void markDeadSymbols(ModuleSummaryIndex &summary, llvm::DenseSet<GUID> &Preserve
160
160
unsigned LiveSymbols = 0 ;
161
161
162
162
for (auto GUID : PreservedGUIDs) {
163
- Worklist.push_back (std::make_shared<LivenessTrace>(
164
- nullptr , GUID, LivenessTrace::Preserved));
163
+ auto trace = std::make_shared<LivenessTrace>(
164
+ nullptr , GUID, LivenessTrace::Preserved);
165
+ auto maybeFS = summary.getFunctionSummary (GUID);
166
+ if (!maybeFS) {
167
+ llvm_unreachable (" Bad GUID" );
168
+ }
169
+ if (!maybeFS->getName ().empty ()) {
170
+ trace->setName (maybeFS->getName ());
171
+ }
172
+ Worklist.push_back (trace);
165
173
}
166
- std::shared_ptr<LivenessTrace> dumpTarget ;
174
+ std::set<std:: shared_ptr<LivenessTrace>> dumpTargets ;
167
175
while (!Worklist.empty ()) {
168
176
auto trace = Worklist.pop_back_val ();
169
177
@@ -172,12 +180,6 @@ void markDeadSymbols(ModuleSummaryIndex &summary, llvm::DenseSet<GUID> &Preserve
172
180
llvm_unreachable (" Bad GUID" );
173
181
}
174
182
auto FS = maybeSummary;
175
- if (!FS->getName ().empty ()) {
176
- trace->setName (FS->getName ());
177
- if (LTOPrintLiveTrace == FS->getName ()) {
178
- dumpTarget = trace;
179
- }
180
- }
181
183
if (FS->isLive ()) continue ;
182
184
183
185
if (!FS->getName ().empty ()) {
@@ -188,10 +190,25 @@ void markDeadSymbols(ModuleSummaryIndex &summary, llvm::DenseSet<GUID> &Preserve
188
190
FS->setLive (true );
189
191
LiveSymbols++;
190
192
193
+ auto queueWorklist = [&](std::shared_ptr<LivenessTrace> trace) {
194
+ auto maybeCallee = summary.getFunctionSummary (trace->guid );
195
+ if (!maybeCallee) {
196
+ llvm_unreachable (" Bad GUID" );
197
+ }
198
+ auto Callee = maybeCallee;
199
+ if (!Callee->getName ().empty ()) {
200
+ trace->setName (Callee->getName ());
201
+ if (LTOPrintLiveTrace == Callee->getName ()) {
202
+ dumpTargets.insert (trace);
203
+ }
204
+ }
205
+ Worklist.push_back (trace);
206
+ };
207
+
191
208
for (auto Call : FS->calls ()) {
192
209
switch (Call.getKind ()) {
193
210
case FunctionSummary::Call::Direct: {
194
- Worklist. push_back (std::make_shared<LivenessTrace>(
211
+ queueWorklist (std::make_shared<LivenessTrace>(
195
212
trace, Call.getCallee (), LivenessTrace::StaticReferenced));
196
213
continue ;
197
214
}
@@ -203,7 +220,7 @@ void markDeadSymbols(ModuleSummaryIndex &summary, llvm::DenseSet<GUID> &Preserve
203
220
if (UsedTypesSet.find (Impl.TypeGuid ) == UsedTypesSet.end ()) {
204
221
continue ;
205
222
}
206
- Worklist. push_back (std::make_shared<LivenessTrace>(
223
+ queueWorklist (std::make_shared<LivenessTrace>(
207
224
trace, Impl.Guid , LivenessTrace::IndirectReferenced));
208
225
}
209
226
break ;
@@ -213,7 +230,7 @@ void markDeadSymbols(ModuleSummaryIndex &summary, llvm::DenseSet<GUID> &Preserve
213
230
}
214
231
}
215
232
}
216
- if ( dumpTarget) {
233
+ for ( auto dumpTarget : dumpTargets ) {
217
234
dumpTarget->dump ();
218
235
}
219
236
}
0 commit comments