//===---------------------- RetireStage.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 retire stage of an instruction pipeline. /// The RetireStage represents the process logic that interacts with the /// simulated RetireControlUnit hardware. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVM_MCA_RETIRE_STAGE_H #define LLVM_TOOLS_LLVM_MCA_RETIRE_STAGE_H #include "RegisterFile.h" #include "RetireControlUnit.h" #include "Stage.h" namespace mca { class RetireStage : public Stage { // Owner will go away when we move listeners/eventing to the stages. RetireControlUnit &RCU; RegisterFile &PRF; public: RetireStage(RetireControlUnit &R, RegisterFile &F) : Stage(), RCU(R), PRF(F) {} RetireStage(const RetireStage &Other) = delete; RetireStage &operator=(const RetireStage &Other) = delete; virtual bool hasWorkToComplete() const override final { return !RCU.isEmpty(); } virtual void cycleStart() override final; virtual bool execute(InstRef &IR) override final { return true; } void notifyInstructionRetired(const InstRef &IR); void onInstructionExecuted(unsigned TokenID); }; } // namespace mca #endif // LLVM_TOOLS_LLVM_MCA_RETIRE_STAGE_H