Index: llvm/test/tools/llvm-profgen/inline-cs-noprobe.test =================================================================== --- llvm/test/tools/llvm-profgen/inline-cs-noprobe.test +++ llvm/test/tools/llvm-profgen/inline-cs-noprobe.test @@ -5,6 +5,13 @@ ; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/inline-cs-noprobe.perfscript --binary=%S/Inputs/inline-cs-noprobe.perfbin --output=%t --profile-summary-cold-count=0 --ignore-stack-samples ; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-STRIP-CTX +; RUN: llvm-profgen --format=extbinary --perfscript=%S/Inputs/inline-cs-noprobe.perfscript --binary=%S/Inputs/inline-cs-noprobe.perfbin --output=%t --profile-summary-cold-count=0 +; RUN: llvm-profdata show -show-prof-sym-list -sample %t | FileCheck %s --check-prefix=CHECK-SYM-LIST + +; CHECK-SYM-LIST: Dump profile symbol list +; CHECK-SYM-LIST: bar +; CHECK-SYM-LIST: foo + ; CHECK:[main:1 @ foo]:225:0 ; CHECK: 2.1: 14 ; CHECK: 3: 15 Index: llvm/test/tools/llvm-profgen/inline-noprobe2.test =================================================================== --- llvm/test/tools/llvm-profgen/inline-noprobe2.test +++ llvm/test/tools/llvm-profgen/inline-noprobe2.test @@ -2,6 +2,15 @@ ; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/inline-noprobe2.perfscript --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t ; RUN: FileCheck %s --input-file %t --check-prefix=CHECK +; RUN: llvm-profgen --format=extbinary --perfscript=%S/Inputs/inline-noprobe2.perfscript --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t +; RUN: llvm-profdata show -show-prof-sym-list -sample %t | FileCheck %s --check-prefix=CHECK-SYM-LIST + +; CHECK-SYM-LIST: Dump profile symbol list +; CHECK-SYM-LIST: main +; CHECK-SYM-LIST: partition_pivot_first +; CHECK-SYM-LIST: partition_pivot_last +; CHECK-SYM-LIST: quick_sort + ;CHECK: partition_pivot_first:1045:5 ;CHECK-NEXT: 0: 5 ;CHECK-NEXT: 1: 5 Index: llvm/tools/llvm-profgen/ProfileGenerator.cpp =================================================================== --- llvm/tools/llvm-profgen/ProfileGenerator.cpp +++ llvm/tools/llvm-profgen/ProfileGenerator.cpp @@ -32,6 +32,10 @@ cl::desc("Use md5 to represent function names in the output profile (only " "meaningful for -extbinary)")); +static cl::opt PopulateProfileSymbolList( + "populate-profile-symbol-list", cl::init(true), cl::Hidden, + cl::desc("Populate profile symbol list (only meaningful for -extbinary)")); + static cl::opt RecursionCompression( "compress-recursion", cl::desc("Compressing recursion by deduplicating adjacent frame " @@ -90,6 +94,16 @@ void ProfileGeneratorBase::write(std::unique_ptr Writer, SampleProfileMap &ProfileMap) { + // Populate profile symbol list if extended binary format is used. + ProfileSymbolList SymbolList; + if (PopulateProfileSymbolList && OutputFormat == SPF_Ext_Binary) { + for (const auto &Item : ProfileMap) { + auto &Profile = Item.second; + SymbolList.add(Profile.getName(), true); + } + Writer->setProfileSymbolList(&SymbolList); + } + if (std::error_code EC = Writer->write(ProfileMap)) exitWithError(std::move(EC)); }