Home | History | Annotate | Line # | Download | only in CodeGen
      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