LLVM  14.0.0git
EntryStage.h
Go to the documentation of this file.
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;
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:
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
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AllocatorList.h:23
llvm::mca::EntryStage::cycleStart
Error cycleStart() override
Called once at the start of each cycle.
Definition: EntryStage.cpp:53
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1168
llvm::mca::EntryStage::isAvailable
bool isAvailable(const InstRef &IR) const override
Returns true if it can execute IR during this cycle.
Definition: EntryStage.cpp:25
llvm::mca::EntryStage::cycleEnd
Error cycleEnd() override
Called once at the end of each cycle.
Definition: EntryStage.cpp:59
llvm::mca::EntryStage::hasWorkToComplete
bool hasWorkToComplete() const override
Returns true if some instructions are still executing this stage.
Definition: EntryStage.cpp:21
SourceMgr.h
IR
Statically lint checks LLVM IR
Definition: Lint.cpp:746
Stage.h
llvm::mca::InstRef
An InstRef contains both a SourceMgr index and Instruction pair.
Definition: Instruction.h:686
llvm::mca::Stage
Definition: Stage.h:27
llvm::mca::SourceMgr
Definition: SourceMgr.h:28
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
SmallVector.h
llvm::mca::EntryStage::EntryStage
EntryStage(SourceMgr &SM)
Definition: EntryStage.h:39
llvm::mca::EntryStage
Definition: EntryStage.h:26
llvm::mca::EntryStage::execute
Error execute(InstRef &IR) override
The primary action that this stage performs on instruction IR.
Definition: EntryStage.cpp:42
Other
Optional< std::vector< StOtherPiece > > Other
Definition: ELFYAML.cpp:1191