================
@@ -70,9 +72,27 @@ void LifetimeSafetyAnalysis::run() {
}
} // namespace internal
+void PrintStats(const LifetimeSafetyStats &Stats) {
+ llvm::errs() << "\n*** LifetimeSafety Missing Origin Stats "
+ "(expression_type : count) :\n\n";
+ unsigned totalMissingOrigins = 0;
+ for (const auto &[expr, count] : Stats.MissingOriginCount) {
+ llvm::errs() << expr << " : " << count << '\n';
+ totalMissingOrigins += count;
+ }
+ llvm::errs() << "Total missing origins: " << totalMissingOrigins << "\n";
+ llvm::errs() << "\n****************************************\n";
+}
+
void runLifetimeSafetyAnalysis(AnalysisDeclContext &AC,
- LifetimeSafetyReporter *Reporter) {
- internal::LifetimeSafetyAnalysis Analysis(AC, Reporter);
- Analysis.run();
+ LifetimeSafetyReporter *Reporter,
+ LifetimeSafetyStats &Stats, bool CollectStats) {
+ std::unique_ptr<internal::LifetimeSafetyAnalysis> Analysis =
+ std::make_unique<internal::LifetimeSafetyAnalysis>(AC, Reporter);
+ Analysis->run();
+ for (const auto &[expr, count] :
+ Analysis->getFactManager().getOriginMgr().getMissingOrigins()) {
+ Stats.MissingOriginCount[expr] += count;
+ }
----------------
usx95 wrote:
`bool CollectStats` param is unused. We should be collecting the expensive
statistitcs only when required and not in the default mode.
I would suggest to move this to another function say
`LifetimeSafetyAnalysis::collectStats(LifetimeSafetyStats &)`.
So it should look like:
```cpp
void runLifetimeSafetyAnalysis(AnalysisDeclContext &AC,
LifetimeSafetyReporter *Reporter,
LifetimeSafetyStats &Stats, bool CollectStats) {
internal::LifetimeSafetyAnalysis Analysis(AC, Reporter);
Analysis.run();
if (CollectStats)
Analysis.collectStats(Stats);
}
```
https://github.com/llvm/llvm-project/pull/166568
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits