1 //===---------------------- EntryStage.h ------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// \file 9 /// 10 /// This file defines the Entry stage of an instruction pipeline. Its sole 11 /// purpose in life is to pick instructions in sequence and move them to the 12 /// next pipeline stage. 13 /// 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_MCA_STAGES_ENTRYSTAGE_H 17 #define LLVM_MCA_STAGES_ENTRYSTAGE_H 18 19 #include "llvm/ADT/SmallVector.h" 20 #include "llvm/MCA/SourceMgr.h" 21 #include "llvm/MCA/Stages/Stage.h" 22 23 namespace llvm { 24 namespace mca { 25 26 class EntryStage final : public Stage { 27 InstRef CurrentInstruction; 28 SmallVector<std::unique_ptr<Instruction>, 16> Instructions; 29 SourceMgr &SM; 30 unsigned NumRetired; 31 32 // Updates the program counter, and sets 'CurrentInstruction'. 33 void getNextInstruction(); 34 35 EntryStage(const EntryStage &Other) = delete; 36 EntryStage &operator=(const EntryStage &Other) = delete; 37 38 public: EntryStage(SourceMgr & SM)39 EntryStage(SourceMgr &SM) : CurrentInstruction(), SM(SM), NumRetired(0) { } 40 41 bool isAvailable(const InstRef &IR) const override; 42 bool hasWorkToComplete() const override; 43 Error execute(InstRef &IR) override; 44 Error cycleStart() override; 45 Error cycleEnd() override; 46 }; 47 48 } // namespace mca 49 } // namespace llvm 50 51 #endif // LLVM_MCA_STAGES_ENTRYSTAGE_H 52