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 23namespace llvm { 24namespace mca { 25 26class 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 Error getNextInstruction(); 34 35 EntryStage(const EntryStage &Other) = delete; 36 EntryStage &operator=(const EntryStage &Other) = delete; 37 38public: 39 EntryStage(SourceMgr &SM) : 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 cycleResume() override; 46 Error cycleEnd() override; 47}; 48 49} // namespace mca 50} // namespace llvm 51 52#endif // LLVM_MCA_STAGES_ENTRYSTAGE_H 53