diff --git a/llvm/tools/llvm-profgen/PerfReader.cpp b/llvm/tools/llvm-profgen/PerfReader.cpp --- a/llvm/tools/llvm-profgen/PerfReader.cpp +++ b/llvm/tools/llvm-profgen/PerfReader.cpp @@ -1212,6 +1212,7 @@ warnTruncatedStack(); warnInvalidRange(); generateUnsymbolizedProfile(); + AggregatedSamples.clear(); if (SkipSymbolization) writeUnsymbolizedProfile(OutputFilename); diff --git a/llvm/tools/llvm-profgen/llvm-profgen.cpp b/llvm/tools/llvm-profgen/llvm-profgen.cpp --- a/llvm/tools/llvm-profgen/llvm-profgen.cpp +++ b/llvm/tools/llvm-profgen/llvm-profgen.cpp @@ -158,6 +158,9 @@ ProfileGeneratorBase::create(Binary.get(), Reader->getSampleCounters(), Reader->profileIsCSFlat()); Generator->generateProfile(); + // The Reader object, espcially its SampleCounters field, is not needed at + // this point, so releasing it to reduce peak memory usage. + Reader.reset(); Generator->write(); return EXIT_SUCCESS;