62 lines · c
1//===-- Thumb1InstrInfo.h - Thumb-1 Instruction Information -----*- 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//9// This file contains the Thumb-1 implementation of the TargetInstrInfo class.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_ARM_THUMB1INSTRINFO_H14#define LLVM_LIB_TARGET_ARM_THUMB1INSTRINFO_H15 16#include "ARMBaseInstrInfo.h"17#include "ThumbRegisterInfo.h"18 19namespace llvm {20 class ARMSubtarget;21 22class Thumb1InstrInfo : public ARMBaseInstrInfo {23 ThumbRegisterInfo RI;24public:25 explicit Thumb1InstrInfo(const ARMSubtarget &STI);26 27 /// Return the noop instruction to use for a noop.28 MCInst getNop() const override;29 30 // Return the non-pre/post incrementing version of 'Opc'. Return 031 // if there is not such an opcode.32 unsigned getUnindexedOpcode(unsigned Opc) const override;33 34 /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As35 /// such, whenever a client has an instance of instruction info, it should36 /// always be able to get register info as well (through this method).37 ///38 const ThumbRegisterInfo &getRegisterInfo() const { return RI; }39 40 void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,41 const DebugLoc &DL, Register DestReg, Register SrcReg,42 bool KillSrc, bool RenamableDest = false,43 bool RenamableSrc = false) const override;44 void storeRegToStackSlot(45 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register SrcReg,46 bool isKill, int FrameIndex, const TargetRegisterClass *RC, Register VReg,47 MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;48 49 void loadRegFromStackSlot(50 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,51 Register DestReg, int FrameIndex, const TargetRegisterClass *RC,52 Register VReg,53 MachineInstr::MIFlag Flags = MachineInstr::NoFlags) const override;54 55 bool canCopyGluedNodeDuringSchedule(SDNode *N) const override;56private:57 void expandLoadStackGuard(MachineBasicBlock::iterator MI) const override;58};59}60 61#endif62