123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- //=- LoongArchInstrInfo.h - LoongArch Instruction Information ---*- 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
- //
- //===----------------------------------------------------------------------===//
- //
- // This file contains the LoongArch implementation of the TargetInstrInfo class.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHINSTRINFO_H
- #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHINSTRINFO_H
- #include "LoongArchRegisterInfo.h"
- #include "llvm/CodeGen/TargetInstrInfo.h"
- #define GET_INSTRINFO_HEADER
- #include "LoongArchGenInstrInfo.inc"
- namespace llvm {
- class LoongArchSubtarget;
- class LoongArchInstrInfo : public LoongArchGenInstrInfo {
- public:
- explicit LoongArchInstrInfo(LoongArchSubtarget &STI);
- void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
- const DebugLoc &DL, MCRegister DstReg, MCRegister SrcReg,
- bool KillSrc) const override;
- void storeRegToStackSlot(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator MBBI, Register SrcReg,
- bool IsKill, int FrameIndex,
- const TargetRegisterClass *RC,
- const TargetRegisterInfo *TRI,
- Register VReg) const override;
- void loadRegFromStackSlot(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator MBBI, Register DstReg,
- int FrameIndex, const TargetRegisterClass *RC,
- const TargetRegisterInfo *TRI,
- Register VReg) const override;
- // Materializes the given integer Val into DstReg.
- void movImm(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
- const DebugLoc &DL, Register DstReg, uint64_t Val,
- MachineInstr::MIFlag Flag = MachineInstr::NoFlags) const;
- unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
- MachineBasicBlock *getBranchDestBlock(const MachineInstr &MI) const override;
- bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
- MachineBasicBlock *&FBB,
- SmallVectorImpl<MachineOperand> &Cond,
- bool AllowModify) const override;
- bool isBranchOffsetInRange(unsigned BranchOpc,
- int64_t BrOffset) const override;
- unsigned removeBranch(MachineBasicBlock &MBB,
- int *BytesRemoved = nullptr) const override;
- unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
- MachineBasicBlock *FBB, ArrayRef<MachineOperand> Cond,
- const DebugLoc &dl,
- int *BytesAdded = nullptr) const override;
- void insertIndirectBranch(MachineBasicBlock &MBB,
- MachineBasicBlock &NewDestBB,
- MachineBasicBlock &RestoreBB, const DebugLoc &DL,
- int64_t BrOffset, RegScavenger *RS) const override;
- bool
- reverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const override;
- std::pair<unsigned, unsigned>
- decomposeMachineOperandsTargetFlags(unsigned TF) const override;
- ArrayRef<std::pair<unsigned, const char *>>
- getSerializableDirectMachineOperandTargetFlags() const override;
- protected:
- const LoongArchSubtarget &STI;
- };
- } // end namespace llvm
- #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHINSTRINFO_H
|