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 20namespace llvm { 21 22class MachineInstr; 23class SUnit; 24 25class MultiHazardRecognizer : public ScheduleHazardRecognizer { 26 SmallVector<std::unique_ptr<ScheduleHazardRecognizer>, 4> Recognizers; 27 28public: 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