summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Davis <Matthew.Davis@sony.com>2018-08-23 18:42:37 +0000
committerMatt Davis <Matthew.Davis@sony.com>2018-08-23 18:42:37 +0000
commit0f70bc05b34be5792c5e831366639e3f8bd26f19 (patch)
tree6e34e073fa16ca6ccfb3b8312a0574de00200160
parent851e02e52ed4ea3d00edd4963ecc9357bc139f65 (diff)
downloadbcm5719-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.cpp7
-rw-r--r--llvm/tools/llvm-mca/Scheduler.h20
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 {
OpenPOWER on IntegriCloud