[llvm] r346419 - [llvm-mca] PR39261: Rename FetchStage to EntryStage.
Andrea Di Biagio via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 8 09:49:30 PST 2018
Author: adibiagio
Date: Thu Nov 8 09:49:30 2018
New Revision: 346419
URL: http://llvm.org/viewvc/llvm-project?rev=346419&view=rev
Log:
[llvm-mca] PR39261: Rename FetchStage to EntryStage.
This fixes PR39261.
FetchStage is a misnomer. It causes confusion with the frontend fetch stage,
which we don't currently simulate. I decided to rename it into EntryStage
mainly because this is meant to be a "source" stage for all pipelines.
Differential Revision: https://reviews.llvm.org/D54268
Added:
llvm/trunk/tools/llvm-mca/include/Stages/EntryStage.h
- copied, changed from r346418, llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h
llvm/trunk/tools/llvm-mca/lib/Stages/EntryStage.cpp
- copied, changed from r346418, llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp
Removed:
llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h
llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp
Modified:
llvm/trunk/tools/llvm-mca/lib/CMakeLists.txt
llvm/trunk/tools/llvm-mca/lib/Context.cpp
llvm/trunk/tools/llvm-mca/llvm-mca.cpp
Copied: llvm/trunk/tools/llvm-mca/include/Stages/EntryStage.h (from r346418, llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/include/Stages/EntryStage.h?p2=llvm/trunk/tools/llvm-mca/include/Stages/EntryStage.h&p1=llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h&r1=346418&r2=346419&rev=346419&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h (original)
+++ llvm/trunk/tools/llvm-mca/include/Stages/EntryStage.h Thu Nov 8 09:49:30 2018
@@ -1,4 +1,4 @@
-//===---------------------- FetchStage.h ------------------------*- C++ -*-===//
+//===---------------------- EntryStage.h ------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -8,13 +8,14 @@
//===----------------------------------------------------------------------===//
/// \file
///
-/// This file defines the Fetch stage of an instruction pipeline. Its sole
-/// purpose in life is to produce instructions for the rest of the pipeline.
+/// This file defines the Entry stage of an instruction pipeline. Its sole
+/// purpose in life is to pick instructions in sequence and move them to the
+/// next pipeline stage.
///
//===----------------------------------------------------------------------===//
-#ifndef LLVM_TOOLS_LLVM_MCA_FETCH_STAGE_H
-#define LLVM_TOOLS_LLVM_MCA_FETCH_STAGE_H
+#ifndef LLVM_TOOLS_LLVM_MCA_ENTRY_STAGE_H
+#define LLVM_TOOLS_LLVM_MCA_ENTRY_STAGE_H
#include "SourceMgr.h"
#include "Stages/Stage.h"
@@ -23,7 +24,7 @@
namespace llvm {
namespace mca {
-class FetchStage final : public Stage {
+class EntryStage final : public Stage {
InstRef CurrentInstruction;
using InstMap = std::map<unsigned, std::unique_ptr<Instruction>>;
InstMap Instructions;
@@ -32,11 +33,11 @@ class FetchStage final : public Stage {
// Updates the program counter, and sets 'CurrentInstruction'.
void getNextInstruction();
- FetchStage(const FetchStage &Other) = delete;
- FetchStage &operator=(const FetchStage &Other) = delete;
+ EntryStage(const EntryStage &Other) = delete;
+ EntryStage &operator=(const EntryStage &Other) = delete;
public:
- FetchStage(SourceMgr &SM) : CurrentInstruction(), SM(SM) {}
+ EntryStage(SourceMgr &SM) : CurrentInstruction(), SM(SM) {}
bool isAvailable(const InstRef &IR) const override;
bool hasWorkToComplete() const override;
Removed: llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h?rev=346418&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h (original)
+++ llvm/trunk/tools/llvm-mca/include/Stages/FetchStage.h (removed)
@@ -1,51 +0,0 @@
-//===---------------------- FetchStage.h ------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-/// \file
-///
-/// This file defines the Fetch stage of an instruction pipeline. Its sole
-/// purpose in life is to produce instructions for the rest of the pipeline.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVM_MCA_FETCH_STAGE_H
-#define LLVM_TOOLS_LLVM_MCA_FETCH_STAGE_H
-
-#include "SourceMgr.h"
-#include "Stages/Stage.h"
-#include <map>
-
-namespace llvm {
-namespace mca {
-
-class FetchStage final : public Stage {
- InstRef CurrentInstruction;
- using InstMap = std::map<unsigned, std::unique_ptr<Instruction>>;
- InstMap Instructions;
- SourceMgr &SM;
-
- // Updates the program counter, and sets 'CurrentInstruction'.
- void getNextInstruction();
-
- FetchStage(const FetchStage &Other) = delete;
- FetchStage &operator=(const FetchStage &Other) = delete;
-
-public:
- FetchStage(SourceMgr &SM) : CurrentInstruction(), SM(SM) {}
-
- bool isAvailable(const InstRef &IR) const override;
- bool hasWorkToComplete() const override;
- Error execute(InstRef &IR) override;
- Error cycleStart() override;
- Error cycleEnd() override;
-};
-
-} // namespace mca
-} // namespace llvm
-
-#endif // LLVM_TOOLS_LLVM_MCA_FETCH_STAGE_H
Modified: llvm/trunk/tools/llvm-mca/lib/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/lib/CMakeLists.txt?rev=346419&r1=346418&r2=346419&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/lib/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-mca/lib/CMakeLists.txt Thu Nov 8 09:49:30 2018
@@ -14,8 +14,8 @@ add_library(LLVMMCA
Instruction.cpp
Pipeline.cpp
Stages/DispatchStage.cpp
+ Stages/EntryStage.cpp
Stages/ExecuteStage.cpp
- Stages/FetchStage.cpp
Stages/InstructionTables.cpp
Stages/RetireStage.cpp
Stages/Stage.cpp
Modified: llvm/trunk/tools/llvm-mca/lib/Context.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/lib/Context.cpp?rev=346419&r1=346418&r2=346419&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/lib/Context.cpp (original)
+++ llvm/trunk/tools/llvm-mca/lib/Context.cpp Thu Nov 8 09:49:30 2018
@@ -20,8 +20,8 @@
#include "HardwareUnits/RetireControlUnit.h"
#include "HardwareUnits/Scheduler.h"
#include "Stages/DispatchStage.h"
+#include "Stages/EntryStage.h"
#include "Stages/ExecuteStage.h"
-#include "Stages/FetchStage.h"
#include "Stages/RetireStage.h"
namespace llvm {
@@ -40,7 +40,7 @@ Context::createDefaultPipeline(const Pip
auto HWS = llvm::make_unique<Scheduler>(SM, LSU.get());
// Create the pipeline stages.
- auto Fetch = llvm::make_unique<FetchStage>(SrcMgr);
+ auto Fetch = llvm::make_unique<EntryStage>(SrcMgr);
auto Dispatch = llvm::make_unique<DispatchStage>(STI, MRI, Opts.DispatchWidth,
*RCU, *PRF);
auto Execute = llvm::make_unique<ExecuteStage>(*HWS);
Copied: llvm/trunk/tools/llvm-mca/lib/Stages/EntryStage.cpp (from r346418, llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/lib/Stages/EntryStage.cpp?p2=llvm/trunk/tools/llvm-mca/lib/Stages/EntryStage.cpp&p1=llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp&r1=346418&r2=346419&rev=346419&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp (original)
+++ llvm/trunk/tools/llvm-mca/lib/Stages/EntryStage.cpp Thu Nov 8 09:49:30 2018
@@ -1,4 +1,4 @@
-//===---------------------- FetchStage.cpp ----------------------*- C++ -*-===//
+//===---------------------- EntryStage.cpp ----------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -13,21 +13,21 @@
///
//===----------------------------------------------------------------------===//
-#include "Stages/FetchStage.h"
+#include "Stages/EntryStage.h"
#include "Instruction.h"
namespace llvm {
namespace mca {
-bool FetchStage::hasWorkToComplete() const { return CurrentInstruction; }
+bool EntryStage::hasWorkToComplete() const { return CurrentInstruction; }
-bool FetchStage::isAvailable(const InstRef & /* unused */) const {
+bool EntryStage::isAvailable(const InstRef & /* unused */) const {
if (CurrentInstruction)
return checkNextStage(CurrentInstruction);
return false;
}
-void FetchStage::getNextInstruction() {
+void EntryStage::getNextInstruction() {
assert(!CurrentInstruction && "There is already an instruction to process!");
if (!SM.hasNext())
return;
@@ -38,7 +38,7 @@ void FetchStage::getNextInstruction() {
SM.updateNext();
}
-llvm::Error FetchStage::execute(InstRef & /*unused */) {
+llvm::Error EntryStage::execute(InstRef & /*unused */) {
assert(CurrentInstruction && "There is no instruction to process!");
if (llvm::Error Val = moveToTheNextStage(CurrentInstruction))
return Val;
@@ -49,13 +49,13 @@ llvm::Error FetchStage::execute(InstRef
return llvm::ErrorSuccess();
}
-llvm::Error FetchStage::cycleStart() {
+llvm::Error EntryStage::cycleStart() {
if (!CurrentInstruction)
getNextInstruction();
return llvm::ErrorSuccess();
}
-llvm::Error FetchStage::cycleEnd() {
+llvm::Error EntryStage::cycleEnd() {
// Find the first instruction which hasn't been retired.
const InstMap::iterator It =
llvm::find_if(Instructions, [](const InstMap::value_type &KeyValuePair) {
Removed: llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp?rev=346418&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp (original)
+++ llvm/trunk/tools/llvm-mca/lib/Stages/FetchStage.cpp (removed)
@@ -1,73 +0,0 @@
-//===---------------------- FetchStage.cpp ----------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-/// \file
-///
-/// This file defines the Fetch stage of an instruction pipeline. Its sole
-/// purpose in life is to produce instructions for the rest of the pipeline.
-///
-//===----------------------------------------------------------------------===//
-
-#include "Stages/FetchStage.h"
-#include "Instruction.h"
-
-namespace llvm {
-namespace mca {
-
-bool FetchStage::hasWorkToComplete() const { return CurrentInstruction; }
-
-bool FetchStage::isAvailable(const InstRef & /* unused */) const {
- if (CurrentInstruction)
- return checkNextStage(CurrentInstruction);
- return false;
-}
-
-void FetchStage::getNextInstruction() {
- assert(!CurrentInstruction && "There is already an instruction to process!");
- if (!SM.hasNext())
- return;
- SourceRef SR = SM.peekNext();
- std::unique_ptr<Instruction> Inst = llvm::make_unique<Instruction>(SR.second);
- CurrentInstruction = InstRef(SR.first, Inst.get());
- Instructions[SR.first] = std::move(Inst);
- SM.updateNext();
-}
-
-llvm::Error FetchStage::execute(InstRef & /*unused */) {
- assert(CurrentInstruction && "There is no instruction to process!");
- if (llvm::Error Val = moveToTheNextStage(CurrentInstruction))
- return Val;
-
- // Move the program counter.
- CurrentInstruction.invalidate();
- getNextInstruction();
- return llvm::ErrorSuccess();
-}
-
-llvm::Error FetchStage::cycleStart() {
- if (!CurrentInstruction)
- getNextInstruction();
- return llvm::ErrorSuccess();
-}
-
-llvm::Error FetchStage::cycleEnd() {
- // Find the first instruction which hasn't been retired.
- const InstMap::iterator It =
- llvm::find_if(Instructions, [](const InstMap::value_type &KeyValuePair) {
- return !KeyValuePair.second->isRetired();
- });
-
- // Erase instructions up to the first that hasn't been retired.
- if (It != Instructions.begin())
- Instructions.erase(Instructions.begin(), It);
-
- return llvm::ErrorSuccess();
-}
-
-} // namespace mca
-} // namespace llvm
Modified: llvm/trunk/tools/llvm-mca/llvm-mca.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/llvm-mca.cpp?rev=346419&r1=346418&r2=346419&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/llvm-mca.cpp (original)
+++ llvm/trunk/tools/llvm-mca/llvm-mca.cpp Thu Nov 8 09:49:30 2018
@@ -24,7 +24,7 @@
#include "CodeRegion.h"
#include "CodeRegionGenerator.h"
#include "PipelinePrinter.h"
-#include "Stages/FetchStage.h"
+#include "Stages/EntryStage.h"
#include "Stages/InstructionTables.h"
#include "Views/DispatchStatistics.h"
#include "Views/InstructionInfoView.h"
@@ -434,7 +434,7 @@ int main(int argc, char **argv) {
if (PrintInstructionTables) {
// Create a pipeline, stages, and a printer.
auto P = make_unique<mca::Pipeline>();
- P->appendStage(make_unique<mca::FetchStage>(S));
+ P->appendStage(make_unique<mca::EntryStage>(S));
P->appendStage(make_unique<mca::InstructionTables>(SM));
mca::PipelinePrinter Printer(*P);
More information about the llvm-commits
mailing list