diff options
| author | Matt Davis <Matthew.Davis@sony.com> | 2018-08-23 18:42:37 +0000 | 
|---|---|---|
| committer | Matt Davis <Matthew.Davis@sony.com> | 2018-08-23 18:42:37 +0000 | 
| commit | 0f70bc05b34be5792c5e831366639e3f8bd26f19 (patch) | |
| tree | 6e34e073fa16ca6ccfb3b8312a0574de00200160 | |
| parent | 851e02e52ed4ea3d00edd4963ecc9357bc139f65 (diff) | |
| download | bcm5719-llvm-0f70bc05b34be5792c5e831366639e3f8bd26f19.tar.gz bcm5719-llvm-0f70bc05b34be5792c5e831366639e3f8bd26f19.zip  | |
[llvm-mca] Set the Selection strategy to Default if nullptr is passed.
* Set (not reset) the strategy in Scheduler::setCustomStrategyImpl()
llvm-svn: 340566
| -rw-r--r-- | llvm/tools/llvm-mca/Scheduler.cpp | 7 | ||||
| -rw-r--r-- | llvm/tools/llvm-mca/Scheduler.h | 20 | 
2 files changed, 20 insertions, 7 deletions
diff --git a/llvm/tools/llvm-mca/Scheduler.cpp b/llvm/tools/llvm-mca/Scheduler.cpp index 4ba48a28b8e..cc904c84b48 100644 --- a/llvm/tools/llvm-mca/Scheduler.cpp +++ b/llvm/tools/llvm-mca/Scheduler.cpp @@ -24,6 +24,11 @@ using namespace llvm;  ResourceStrategy::~ResourceStrategy() = default; +void Scheduler::initializeStrategy(std::unique_ptr<SchedulerStrategy> S) { +  // Ensure we have a valid (non-null) strategy object. +  Strategy = S ? std::move(S) : llvm::make_unique<DefaultSchedulerStrategy>(); +} +  void DefaultResourceStrategy::skipMask(uint64_t Mask) {    NextInSequenceMask &= (~Mask);    if (!NextInSequenceMask) { @@ -116,7 +121,7 @@ void ResourceManager::setCustomStrategyImpl(std::unique_ptr<ResourceStrategy> S,    unsigned Index = getResourceStateIndex(ResourceID);    assert(Index < Resources.size() && "Invalid processor resource index!");    assert(S && "Unexpected null strategy in input!"); -  Strategies[Index].reset(S.get()); +  Strategies[Index] = std::move(S);  }  unsigned ResourceManager::resolveResourceMask(uint64_t Mask) const { diff --git a/llvm/tools/llvm-mca/Scheduler.h b/llvm/tools/llvm-mca/Scheduler.h index 37ebdb453e2..ed138fd7180 100644 --- a/llvm/tools/llvm-mca/Scheduler.h +++ b/llvm/tools/llvm-mca/Scheduler.h @@ -430,6 +430,11 @@ class Scheduler : public HardwareUnit {    std::vector<InstRef> ReadySet;    std::vector<InstRef> IssuedSet; +  /// Verify the given selection strategy and set the Strategy member +  /// accordingly.  If no strategy is provided, the DefaultSchedulerStrategy is +  /// used. +  void initializeStrategy(std::unique_ptr<SchedulerStrategy> S); +    /// Issue an instruction without updating the ready queue.    void issueInstructionImpl(        InstRef &IR, @@ -446,16 +451,19 @@ class Scheduler : public HardwareUnit {  public:    Scheduler(const llvm::MCSchedModel &Model, LSUnit *Lsu) -      : LSU(Lsu), Strategy(llvm::make_unique<DefaultSchedulerStrategy>()), -        Resources(llvm::make_unique<ResourceManager>(Model)) {} +      : LSU(Lsu), Resources(llvm::make_unique<ResourceManager>(Model)) { +    initializeStrategy(nullptr); +  }    Scheduler(const llvm::MCSchedModel &Model, LSUnit *Lsu,              std::unique_ptr<SchedulerStrategy> SelectStrategy) -      : LSU(Lsu), Strategy(std::move(SelectStrategy)), -        Resources(llvm::make_unique<ResourceManager>(Model)) {} +      : LSU(Lsu), Resources(llvm::make_unique<ResourceManager>(Model)) { +    initializeStrategy(std::move(SelectStrategy)); +  }    Scheduler(std::unique_ptr<ResourceManager> RM, LSUnit *Lsu,              std::unique_ptr<SchedulerStrategy> SelectStrategy) -      : LSU(Lsu), Strategy(std::move(SelectStrategy)), -        Resources(std::move(RM)) {} +      : LSU(Lsu), Resources(std::move(RM)) { +    initializeStrategy(std::move(SelectStrategy)); +  }    // Stalls generated by the scheduler.    enum Status {  | 

