forked from OSchip/llvm-project
Reapply "[llvm-mca] Return the total number of cycles from method Pipeline::run()."
This reapplies r347767 (originally reviewed at: https://reviews.llvm.org/D55000) with a fix for the missing std::move of the Error returned by the call to Pipeline::runCycle(). Below is the original commit message from r347767. If a user only cares about the overall latency, then the best/quickest way is to change method Pipeline::run() so that it returns the total number of cycles to the caller. When the simulation pipeline is run, the number of cycles (or an error) is returned from method Pipeline::run(). The advantage is that no hardware event listener is needed for computing that latency. So, the whole process should be faster (and simpler - at least for that particular use case). llvm-svn: 347795
This commit is contained in:
parent
faee83d102
commit
d10ed7c8d7
|
@ -67,7 +67,10 @@ class Pipeline {
|
|||
public:
|
||||
Pipeline() : Cycles(0) {}
|
||||
void appendStage(std::unique_ptr<Stage> S);
|
||||
Error run();
|
||||
|
||||
/// Returns the total number of simulated cycles.
|
||||
Expected<unsigned> run();
|
||||
|
||||
void addEventListener(HWEventListener *Listener);
|
||||
};
|
||||
} // namespace mca
|
||||
|
|
|
@ -35,18 +35,18 @@ bool Pipeline::hasWorkToProcess() {
|
|||
});
|
||||
}
|
||||
|
||||
Error Pipeline::run() {
|
||||
Expected<unsigned> Pipeline::run() {
|
||||
assert(!Stages.empty() && "Unexpected empty pipeline found!");
|
||||
|
||||
do {
|
||||
notifyCycleBegin();
|
||||
if (Error Err = runCycle())
|
||||
return Err;
|
||||
return std::move(Err);
|
||||
notifyCycleEnd();
|
||||
++Cycles;
|
||||
} while (hasWorkToProcess());
|
||||
|
||||
return ErrorSuccess();
|
||||
return Cycles;
|
||||
}
|
||||
|
||||
Error Pipeline::runCycle() {
|
||||
|
|
|
@ -240,8 +240,9 @@ static void processViewOptions() {
|
|||
// Returns true on success.
|
||||
static bool runPipeline(mca::Pipeline &P) {
|
||||
// Handle pipeline errors here.
|
||||
if (auto Err = P.run()) {
|
||||
WithColor::error() << toString(std::move(Err));
|
||||
Expected<unsigned> Cycles = P.run();
|
||||
if (!Cycles) {
|
||||
WithColor::error() << toString(Cycles.takeError());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue