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 | Error getNextInstruction(); |
34 | |
35 | EntryStage(const EntryStage &Other) = delete; |
36 | EntryStage &operator=(const EntryStage &Other) = delete; |
37 | |
38 | public: |
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 | |