33#ifndef TCE_INSTR_INFO_H
34#define TCE_INSTR_INFO_H
36#include <llvm/Support/ErrorHandling.h>
37#include "tce_config.h"
38#include <llvm/CodeGen/TargetInstrInfo.h>
41#define GET_INSTRINFO_HEADER
42#include "TCEGenInstrInfo.inc"
46 class TCETargetMachine;
47 class TCETargetMachinePlugin;
62 const InstrItineraryData *
72 MachineBasicBlock &MBB, MachineBasicBlock *TBB,
73 MachineBasicBlock *FBB,
74 ArrayRef<MachineOperand> Cond,
76 ,
int *BytesAdded =
nullptr)
const override;
78 MachineBasicBlock &mbb,
79 int *BytesRemoved =
nullptr)
const override;
82 const MachineBasicBlock &MBB)
const;
85 MachineBasicBlock& mbb,
86 MachineBasicBlock::iterator mbbi,
87 unsigned srcReg,
bool isKill,
int frameIndex,
88 #ifdef LLVM_OLDER_THAN_16
89 const TargetRegisterClass* rc)
const;
91 const TargetRegisterClass* rc, Register vReg)
const;
96 MachineBasicBlock& mbb,
97 MachineBasicBlock::iterator mbbi,
98 Register srcReg,
bool isKill,
int frameIndex,
99 #ifdef LLVM_OLDER_THAN_16
100 const TargetRegisterClass* rc,
const TargetRegisterInfo*)
const override {
103 const TargetRegisterClass* rc,
const TargetRegisterInfo*,
104 Register vReg)
const override {
112 MachineBasicBlock& mbb,
113 MachineBasicBlock::iterator mbbi,
114 unsigned destReg,
int frameIndex,
115 #ifdef LLVM_OLDER_THAN_16
116 const TargetRegisterClass* rc)
const;
118 const TargetRegisterClass* rc, Register vReg)
const;
123 MachineBasicBlock& mbb,
124 MachineBasicBlock::iterator mbbi,
125 Register destReg,
int frameIndex,
126 #ifdef LLVM_OLDER_THAN_16
127 const TargetRegisterClass* rc,
const TargetRegisterInfo*)
const override {
130 const TargetRegisterClass* rc,
const TargetRegisterInfo*,
131 Register vReg)
const override {
137 MachineBasicBlock& mbb,
138 MachineBasicBlock::iterator mbbi,
140 MCRegister destReg, MCRegister srcReg,
141 bool KillSrc)
const override;
144 llvm::SmallVectorImpl<llvm::MachineOperand>& cond)
const override;
147 MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
148 MachineBasicBlock *&FBB,
149 llvm::SmallVectorImpl<llvm::MachineOperand>& cond,
150 bool allowModify =
false)
157 MachineBasicBlock *LoopBB)
const override;
159 virtual bool isPredicated(
const MachineInstr& MI)
const override;
160 virtual bool isPredicable(
const MachineInstr& MI)
const override;
164 ArrayRef<MachineOperand> cond)
const override;
167 MachineInstr& MI, std::vector<MachineOperand>& Pred,
168 bool SkipDead)
const override;
172 ArrayRef<MachineOperand> Pred1,
173 ArrayRef<MachineOperand> Pred2)
const override {
178 MachineBasicBlock& mbb,
179 MachineBasicBlock& tbb,
180 ArrayRef<MachineOperand> cond,
181 const DebugLoc& dl)
const;
184 unsigned ExtraPredCycles,
185 BranchProbability Probability)
const override;
188 unsigned NumTCycles,
unsigned ExtraTCycles,
189 MachineBasicBlock &FMBB,
190 unsigned NumFCycles,
unsigned ExtraFCycles,
191 BranchProbability Probability)
const override;
205 const TargetSubtargetInfo &)
const override;
217 MachineBasicBlock& mbb,
218 MachineBasicBlock::iterator mbbi,
220 MCRegister destReg, MCRegister srcReg,
int getMatchingCondBranchOpcode(int Opc, bool inverted) const
const TCERegisterInfo ri_
virtual void storeRegToStackSlot(MachineBasicBlock &mbb, MachineBasicBlock::iterator mbbi, unsigned srcReg, bool isKill, int frameIndex, const TargetRegisterClass *rc, Register vReg) const
virtual bool isPredicated(const MachineInstr &MI) const override
unsigned removeBranch(MachineBasicBlock &mbb, int *BytesRemoved=nullptr) const override
virtual bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, llvm::SmallVectorImpl< llvm::MachineOperand > &cond, bool allowModify=false) const override
virtual void copyPhysReg(MachineBasicBlock &mbb, MachineBasicBlock::iterator mbbi, const DebugLoc &DL, MCRegister destReg, MCRegister srcReg, bool KillSrc) const override
std::tuple< int, int > getPointerAdjustment(int offset) const
virtual bool reverseBranchCondition(llvm::SmallVectorImpl< llvm::MachineOperand > &cond) const override
virtual bool SubsumesPredicate(ArrayRef< MachineOperand > Pred1, ArrayRef< MachineOperand > Pred2) const override
virtual bool isPredicable(const MachineInstr &MI) const override
virtual bool BlockHasNoFallThrough(const MachineBasicBlock &MBB) const
const InstrItineraryData * getInstrItineraryData() const
virtual void loadRegFromStackSlot(MachineBasicBlock &mbb, MachineBasicBlock::iterator mbbi, unsigned destReg, int frameIndex, const TargetRegisterClass *rc, Register vReg) const
virtual DFAPacketizer * CreateTargetScheduleState(const TargetSubtargetInfo &) const override
virtual bool isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumCycles, unsigned ExtraPredCycles, BranchProbability Probability) const override
virtual void storeRegToStackSlot(MachineBasicBlock &mbb, MachineBasicBlock::iterator mbbi, Register srcReg, bool isKill, int frameIndex, const TargetRegisterClass *rc, const TargetRegisterInfo *, Register vReg) const override
bool copyPhysVectorReg(MachineBasicBlock &mbb, MachineBasicBlock::iterator mbbi, const DebugLoc &DL, MCRegister destReg, MCRegister srcReg, bool killSrc) const
InstrItineraryData InstrItins
virtual bool PredicateInstruction(MachineInstr &mi, ArrayRef< MachineOperand > cond) const override
virtual const TargetRegisterInfo & getRegisterInfo() const
virtual void loadRegFromStackSlot(MachineBasicBlock &mbb, MachineBasicBlock::iterator mbbi, Register destReg, int frameIndex, const TargetRegisterClass *rc, const TargetRegisterInfo *, Register vReg) const override
virtual unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, ArrayRef< MachineOperand > Cond, const DebugLoc &DL, int *BytesAdded=nullptr) const override
const TCETargetMachinePlugin * plugin_
virtual void insertCCBranch(MachineBasicBlock &mbb, MachineBasicBlock &tbb, ArrayRef< MachineOperand > cond, const DebugLoc &dl) const
std::unique_ptr< PipelinerLoopInfo > analyzeLoopForPipelining(MachineBasicBlock *LoopBB) const override
Analyze loop L, which must be a single-basic-block loop, and if the conditions can be understood enou...
virtual bool ClobbersPredicate(MachineInstr &MI, std::vector< MachineOperand > &Pred, bool SkipDead) const override