| //===-------------------- RISCVCustomBehaviour.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 RISCVCustomBehaviour class which inherits from |
| /// CustomBehaviour. This class is used by the tool llvm-mca to enforce |
| /// target specific behaviour that is not expressed well enough in the |
| /// scheduling model for mca to enforce it automatically. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_LIB_TARGET_RISCV_MCA_RISCVCUSTOMBEHAVIOUR_H |
| #define LLVM_LIB_TARGET_RISCV_MCA_RISCVCUSTOMBEHAVIOUR_H |
| |
| #include "llvm/ADT/SmallVector.h" |
| #include "llvm/MC/MCInst.h" |
| #include "llvm/MC/MCInstrDesc.h" |
| #include "llvm/MC/MCInstrInfo.h" |
| #include "llvm/MCA/CustomBehaviour.h" |
| |
| namespace llvm { |
| namespace mca { |
| |
| class RISCVLMULInstrument : public Instrument { |
| public: |
| static const StringRef DESC_NAME; |
| static bool isDataValid(StringRef Data); |
| |
| RISCVLMULInstrument(StringRef Data) : Instrument(DESC_NAME, Data) {} |
| |
| ~RISCVLMULInstrument() = default; |
| |
| uint8_t getLMUL() const; |
| }; |
| |
| class RISCVInstrumentManager : public InstrumentManager { |
| public: |
| RISCVInstrumentManager(const MCSubtargetInfo &STI, const MCInstrInfo &MCII) |
| : InstrumentManager(STI, MCII) {} |
| |
| bool shouldIgnoreInstruments() const override { return false; } |
| bool supportsInstrumentType(StringRef Type) const override; |
| |
| /// Create a Instrument for RISCV target |
| SharedInstrument createInstrument(StringRef Desc, StringRef Data) override; |
| |
| /// Using the Instrument, returns a SchedClassID to use instead of |
| /// the SchedClassID that belongs to the MCI or the original SchedClassID. |
| unsigned |
| getSchedClassID(const MCInstrInfo &MCII, const MCInst &MCI, |
| const SmallVector<SharedInstrument> &IVec) const override; |
| }; |
| |
| } // namespace mca |
| } // namespace llvm |
| |
| #endif |