Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.