//===----------------------- HWEventListener.h ------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// \file /// /// This file defines the main interface for hardware event listeners. /// //===----------------------------------------------------------------------===// #ifndef LLVM_MCA_HWEVENTLISTENER_H #define LLVM_MCA_HWEVENTLISTENER_H #include "llvm/ADT/ArrayRef.h" #include "llvm/MCA/Instruction.h" #include "llvm/MCA/Support.h" namespace llvm { namespace mca { // An HWInstructionEvent represents state changes of instructions that // listeners might be interested in. Listeners can choose to ignore any event // they are not interested in. class HWInstructionEvent { … }; // ResourceRef::first is the index of the associated Resource. // ResourceRef::second is a bitmask of the referenced sub-unit of the resource. ResourceRef; ResourceUse; class HWInstructionIssuedEvent : public HWInstructionEvent { … }; class HWInstructionDispatchedEvent : public HWInstructionEvent { … }; class HWInstructionRetiredEvent : public HWInstructionEvent { … }; // A HWStallEvent represents a pipeline stall caused by the lack of hardware // resources. class HWStallEvent { … }; // A HWPressureEvent describes an increase in backend pressure caused by // the presence of data dependencies or unavailability of pipeline resources. class HWPressureEvent { … }; class HWEventListener { … }; } // namespace mca } // namespace llvm #endif // LLVM_MCA_HWEVENTLISTENER_H