1 //=- llvm/CodeGen/MultiHazardRecognizer.h - Scheduling Support ----*- 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 //
9 // This file implements the MultiHazardRecognizer class, which is a wrapper
10 // for a set of ScheduleHazardRecognizer instances
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CODEGEN_MULTIHAZARDRECOGNIZER_H
15 #define LLVM_CODEGEN_MULTIHAZARDRECOGNIZER_H
16 
17 #include "llvm/ADT/SmallVector.h"
18 #include "llvm/CodeGen/ScheduleHazardRecognizer.h"
19 
20 namespace llvm {
21 
22 class MachineInstr;
23 class SUnit;
24 
25 class MultiHazardRecognizer : public ScheduleHazardRecognizer {
26   SmallVector<std::unique_ptr<ScheduleHazardRecognizer>, 4> Recognizers;
27 
28 public:
29   MultiHazardRecognizer() = default;
30   void AddHazardRecognizer(std::unique_ptr<ScheduleHazardRecognizer> &&);
31 
32   bool atIssueLimit() const override;
33   HazardType getHazardType(SUnit *, int Stalls = 0) override;
34   void Reset() override;
35   void EmitInstruction(SUnit *) override;
36   void EmitInstruction(MachineInstr *) override;
37   unsigned PreEmitNoops(SUnit *) override;
38   unsigned PreEmitNoops(MachineInstr *) override;
39   bool ShouldPreferAnother(SUnit *) override;
40   void AdvanceCycle() override;
41   void RecedeCycle() override;
42   void EmitNoop() override;
43 };
44 
45 } // end namespace llvm
46 
47 #endif // LLVM_CODEGEN_MULTIHAZARDRECOGNIZER_H
48