[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