49 lines · c
1//===-------------------- X86CustomBehaviour.h ------------------*-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-exception6//7//===----------------------------------------------------------------------===//8/// \file9///10/// This file defines the X86CustomBehaviour class which inherits from11/// CustomBehaviour. This class is used by the tool llvm-mca to enforce12/// target specific behaviour that is not expressed well enough in the13/// scheduling model for mca to enforce it automatically.14///15//===----------------------------------------------------------------------===//16 17#ifndef LLVM_LIB_TARGET_X86_MCA_X86CUSTOMBEHAVIOUR_H18#define LLVM_LIB_TARGET_X86_MCA_X86CUSTOMBEHAVIOUR_H19 20#include "llvm/MCA/CustomBehaviour.h"21#include "llvm/TargetParser/TargetParser.h"22 23namespace llvm {24namespace mca {25 26class X86InstrPostProcess : public InstrPostProcess {27 /// Called within X86InstrPostProcess to specify certain instructions28 /// as load and store barriers.29 void setMemBarriers(Instruction &Inst, const MCInst &MCI);30 31 /// Called within X86InstrPostPorcess to remove some rsp read operands32 /// on stack instructions to better simulate the stack engine. We currently33 /// do not model features of the stack engine like sync uops.34 void useStackEngine(Instruction &Inst, const MCInst &MCI);35 36public:37 X86InstrPostProcess(const MCSubtargetInfo &STI, const MCInstrInfo &MCII)38 : InstrPostProcess(STI, MCII) {}39 40 ~X86InstrPostProcess() override = default;41 42 void postProcessInstruction(Instruction &Inst, const MCInst &MCI) override;43};44 45} // namespace mca46} // namespace llvm47 48#endif49