diff options
| author | Hiroshi Yamauchi <yamauchi@google.com> | 2019-11-20 13:08:07 -0800 | 
|---|---|---|
| committer | Hiroshi Yamauchi <yamauchi@google.com> | 2019-12-02 13:54:13 -0800 | 
| commit | 8cdfdfeee6dada5d47eabe9c1d44ceb12235da8f (patch) | |
| tree | 888c196b7ae0b7aea6b420baab138ba8dc6cbfd8 | |
| parent | 7999cd41d16d841d66c9c91b56bddaf209c54955 (diff) | |
| download | bcm5719-llvm-8cdfdfeee6dada5d47eabe9c1d44ceb12235da8f.tar.gz bcm5719-llvm-8cdfdfeee6dada5d47eabe9c1d44ceb12235da8f.zip  | |
[PGO][PGSO] Add an optional query type parameter to shouldOptimizeForSize.
Summary:
In case of a need to distinguish different query sites for gradual commit or
debugging of PGSO. NFC.
Reviewers: davidxl
Subscribers: hiraditya, zzheng, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D70510
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineSizeOpts.h | 10 | ||||
| -rw-r--r-- | llvm/include/llvm/Transforms/Utils/SizeOpts.h | 21 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineSizeOpts.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/ConstantHoisting.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/SizeOpts.cpp | 12 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 3 | 
9 files changed, 44 insertions, 24 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineSizeOpts.h b/llvm/include/llvm/CodeGen/MachineSizeOpts.h index 75e871d9747..3b02d0860ea 100644 --- a/llvm/include/llvm/CodeGen/MachineSizeOpts.h +++ b/llvm/include/llvm/CodeGen/MachineSizeOpts.h @@ -23,14 +23,16 @@ class MachineBlockFrequencyInfo;  class MachineFunction;  /// Returns true if machine function \p MF is suggested to be size-optimized -/// base on the profile. +/// based on the profile.  bool shouldOptimizeForSize(const MachineFunction *MF, ProfileSummaryInfo *PSI, -                           const MachineBlockFrequencyInfo *BFI); +                           const MachineBlockFrequencyInfo *BFI, +                           PGSOQueryType QueryType = PGSOQueryType::Other);  /// Returns true if machine basic block \p MBB is suggested to be size-optimized -/// base on the profile. +/// based on the profile.  bool shouldOptimizeForSize(const MachineBasicBlock *MBB,                             ProfileSummaryInfo *PSI, -                           const MachineBlockFrequencyInfo *MBFI); +                           const MachineBlockFrequencyInfo *MBFI, +                           PGSOQueryType QueryType = PGSOQueryType::Other);  } // end namespace llvm diff --git a/llvm/include/llvm/Transforms/Utils/SizeOpts.h b/llvm/include/llvm/Transforms/Utils/SizeOpts.h index 4614007a645..2d2edfac8c4 100644 --- a/llvm/include/llvm/Transforms/Utils/SizeOpts.h +++ b/llvm/include/llvm/Transforms/Utils/SizeOpts.h @@ -33,9 +33,14 @@ class BlockFrequencyInfo;  class Function;  class ProfileSummaryInfo; +enum class PGSOQueryType { +  IRPass,  // A query call from an IR-level transform pass. +  Other,   // Others. +}; +  template<typename AdapterT, typename FuncT, typename BFIT>  bool shouldFuncOptimizeForSizeImpl(const FuncT *F, ProfileSummaryInfo *PSI, -                                   BFIT *BFI) { +                                   BFIT *BFI, PGSOQueryType QueryType) {    assert(F);    if (!PSI || !BFI || !PSI->hasProfileSummary())      return false; @@ -55,7 +60,7 @@ bool shouldFuncOptimizeForSizeImpl(const FuncT *F, ProfileSummaryInfo *PSI,  template<typename AdapterT, typename BlockT, typename BFIT>  bool shouldOptimizeForSizeImpl(const BlockT *BB, ProfileSummaryInfo *PSI, -                               BFIT *BFI) { +                               BFIT *BFI, PGSOQueryType QueryType) {    assert(BB);    if (!PSI || !BFI || !PSI->hasProfileSummary())      return false; @@ -73,15 +78,17 @@ bool shouldOptimizeForSizeImpl(const BlockT *BB, ProfileSummaryInfo *PSI,        BB, PSI, BFI);  } -/// Returns true if function \p F is suggested to be size-optimized base on the +/// Returns true if function \p F is suggested to be size-optimized based on the  /// profile.  bool shouldOptimizeForSize(const Function *F, ProfileSummaryInfo *PSI, -                           BlockFrequencyInfo *BFI); +                           BlockFrequencyInfo *BFI, +                           PGSOQueryType QueryType = PGSOQueryType::Other); -/// Returns true if basic block \p BB is suggested to be size-optimized base -/// on the profile. +/// Returns true if basic block \p BB is suggested to be size-optimized based on +/// the profile.  bool shouldOptimizeForSize(const BasicBlock *BB, ProfileSummaryInfo *PSI, -                           BlockFrequencyInfo *BFI); +                           BlockFrequencyInfo *BFI, +                           PGSOQueryType QueryType = PGSOQueryType::Other);  } // end namespace llvm diff --git a/llvm/lib/CodeGen/MachineSizeOpts.cpp b/llvm/lib/CodeGen/MachineSizeOpts.cpp index 0c2ef3321e0..aff67f9cfd5 100644 --- a/llvm/lib/CodeGen/MachineSizeOpts.cpp +++ b/llvm/lib/CodeGen/MachineSizeOpts.cpp @@ -107,14 +107,16 @@ struct MachineBasicBlockBFIAdapter {  bool llvm::shouldOptimizeForSize(const MachineFunction *MF,                                   ProfileSummaryInfo *PSI, -                                 const MachineBlockFrequencyInfo *MBFI) { +                                 const MachineBlockFrequencyInfo *MBFI, +                                 PGSOQueryType QueryType) {    return shouldFuncOptimizeForSizeImpl<MachineBasicBlockBFIAdapter>( -      MF, PSI, MBFI); +      MF, PSI, MBFI, QueryType);  }  bool llvm::shouldOptimizeForSize(const MachineBasicBlock *MBB,                                   ProfileSummaryInfo *PSI, -                                 const MachineBlockFrequencyInfo *MBFI) { +                                 const MachineBlockFrequencyInfo *MBFI, +                                 PGSOQueryType QueryType) {    return shouldOptimizeForSizeImpl<MachineBasicBlockBFIAdapter>( -      MBB, PSI, MBFI); +      MBB, PSI, MBFI, QueryType);  } diff --git a/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp b/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp index dbe49cbc03c..21077a52c15 100644 --- a/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp +++ b/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp @@ -553,7 +553,8 @@ ConstantHoistingPass::maximizeConstantsInRange(ConstCandVecType::iterator S,    unsigned NumUses = 0;    bool OptForSize = Entry->getParent()->hasOptSize() || -                    llvm::shouldOptimizeForSize(Entry->getParent(), PSI, BFI); +                    llvm::shouldOptimizeForSize(Entry->getParent(), PSI, BFI, +                                                PGSOQueryType::IRPass);    if (!OptForSize || std::distance(S,E) > 100) {      for (auto ConstCand = S; ConstCand != E; ++ConstCand) {        NumUses += ConstCand->Uses.size(); diff --git a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp index 5b822b6b818..598a85e5b94 100644 --- a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp +++ b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp @@ -545,7 +545,8 @@ public:        auto *HeaderBB = L->getHeader();        auto *F = HeaderBB->getParent();        bool OptForSize = F->hasOptSize() || -                        llvm::shouldOptimizeForSize(HeaderBB, PSI, BFI); +                        llvm::shouldOptimizeForSize(HeaderBB, PSI, BFI, +                                                    PGSOQueryType::IRPass);        if (OptForSize) {          LLVM_DEBUG(              dbgs() << "Versioning is needed but not allowed when optimizing " diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp index bb314310cfa..4c2b079c6bb 100644 --- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp +++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp @@ -213,7 +213,8 @@ TargetTransformInfo::UnrollingPreferences llvm::gatherUnrollingPreferences(    // Apply size attributes    bool OptForSize = L->getHeader()->getParent()->hasOptSize() || -                    llvm::shouldOptimizeForSize(L->getHeader(), PSI, BFI); +                    llvm::shouldOptimizeForSize(L->getHeader(), PSI, BFI, +                                                PGSOQueryType::IRPass);    if (OptForSize) {      UP.Threshold = UP.OptSizeThreshold;      UP.PartialThreshold = UP.PartialOptSizeThreshold; diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp index 9e57d660b04..ef2af01f8af 100644 --- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -2755,7 +2755,8 @@ Value *LibCallSimplifier::optimizeFPuts(CallInst *CI, IRBuilder<> &B) {    // Don't rewrite fputs to fwrite when optimising for size because fwrite    // requires more arguments and thus extra MOVs are required.    bool OptForSize = CI->getFunction()->hasOptSize() || -                    llvm::shouldOptimizeForSize(CI->getParent(), PSI, BFI); +                    llvm::shouldOptimizeForSize(CI->getParent(), PSI, BFI, +                                                PGSOQueryType::IRPass);    if (OptForSize)      return nullptr; diff --git a/llvm/lib/Transforms/Utils/SizeOpts.cpp b/llvm/lib/Transforms/Utils/SizeOpts.cpp index f1200471cb4..555073af0b2 100644 --- a/llvm/lib/Transforms/Utils/SizeOpts.cpp +++ b/llvm/lib/Transforms/Utils/SizeOpts.cpp @@ -70,11 +70,15 @@ struct BasicBlockBFIAdapter {  } // end anonymous namespace  bool llvm::shouldOptimizeForSize(const Function *F, ProfileSummaryInfo *PSI, -                                 BlockFrequencyInfo *BFI) { -  return shouldFuncOptimizeForSizeImpl<BasicBlockBFIAdapter>(F, PSI, BFI); +                                 BlockFrequencyInfo *BFI, +                                 PGSOQueryType QueryType) { +  return shouldFuncOptimizeForSizeImpl<BasicBlockBFIAdapter>(F, PSI, BFI, +                                                             QueryType);  }  bool llvm::shouldOptimizeForSize(const BasicBlock *BB, ProfileSummaryInfo *PSI, -                                 BlockFrequencyInfo *BFI) { -  return shouldOptimizeForSizeImpl<BasicBlockBFIAdapter>(BB, PSI, BFI); +                                 BlockFrequencyInfo *BFI, +                                 PGSOQueryType QueryType) { +  return shouldOptimizeForSizeImpl<BasicBlockBFIAdapter>(BB, PSI, BFI, +                                                         QueryType);  } diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index fcd8b05b883..2766bc24f84 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -7434,7 +7434,8 @@ getScalarEpilogueLowering(Function *F, Loop *L, LoopVectorizeHints &Hints,    if (Hints.getForce() != LoopVectorizeHints::FK_Enabled &&        (F->hasOptSize() || -       llvm::shouldOptimizeForSize(L->getHeader(), PSI, BFI))) +       llvm::shouldOptimizeForSize(L->getHeader(), PSI, BFI, +                                   PGSOQueryType::IRPass)))      SEL = CM_ScalarEpilogueNotAllowedOptSize;    else if (PreferPredicateOverEpilog ||             Hints.getPredicate() == LoopVectorizeHints::FK_Enabled ||  | 

