diff --git a/llvm/lib/IR/LegacyPassManager.cpp b/llvm/lib/IR/LegacyPassManager.cpp --- a/llvm/lib/IR/LegacyPassManager.cpp +++ b/llvm/lib/IR/LegacyPassManager.cpp @@ -1408,7 +1408,9 @@ FunctionSize = F.getInstructionCount(); } - llvm::TimeTraceScope FunctionScope("OptFunction", F.getName()); + // Store name outside of loop to avoid redundant calls. + StringRef Name = F.getName(); + llvm::TimeTraceScope FunctionScope("OptFunction", Name); for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { FunctionPass *FP = getContainedPass(Index); @@ -1419,7 +1421,7 @@ llvm::TimeTraceScope PassScope( "RunPass", [FP]() { return std::string(FP->getPassName()); }); - dumpPassInfo(FP, EXECUTION_MSG, ON_FUNCTION_MSG, F.getName()); + dumpPassInfo(FP, EXECUTION_MSG, ON_FUNCTION_MSG, Name); dumpRequiredSet(FP); initializeAnalysisImpl(FP); @@ -1458,7 +1460,7 @@ Changed |= LocalChanged; if (LocalChanged) - dumpPassInfo(FP, MODIFICATION_MSG, ON_FUNCTION_MSG, F.getName()); + dumpPassInfo(FP, MODIFICATION_MSG, ON_FUNCTION_MSG, Name); dumpPreservedSet(FP); dumpUsedSet(FP); @@ -1466,7 +1468,7 @@ if (LocalChanged) removeNotPreservedAnalysis(FP); recordAvailableAnalysis(FP); - removeDeadPasses(FP, F.getName(), ON_FUNCTION_MSG); + removeDeadPasses(FP, Name, ON_FUNCTION_MSG); } return Changed;