blob: 9f04a3ed262fbdbaabba72d06cf8efb2cae47e06 [file] [log] [blame]
Jia Liub22310f2012-02-18 12:03:15 +00001//===-- Thumb1InstrInfo.h - Thumb-1 Instruction Information -----*- C++ -*-===//
David Goodwinade05a32009-07-02 22:18:33 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the Thumb-1 implementation of the TargetInstrInfo class.
11//
12//===----------------------------------------------------------------------===//
13
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000014#ifndef LLVM_LIB_TARGET_ARM_THUMB1INSTRINFO_H
15#define LLVM_LIB_TARGET_ARM_THUMB1INSTRINFO_H
David Goodwinade05a32009-07-02 22:18:33 +000016
Craig Topper188ed9d2012-03-17 07:33:42 +000017#include "ARMBaseInstrInfo.h"
Eric Christopherae326492015-03-12 22:48:50 +000018#include "ThumbRegisterInfo.h"
David Goodwinade05a32009-07-02 22:18:33 +000019
20namespace llvm {
21 class ARMSubtarget;
22
23class Thumb1InstrInfo : public ARMBaseInstrInfo {
Eric Christopherae326492015-03-12 22:48:50 +000024 ThumbRegisterInfo RI;
David Goodwinade05a32009-07-02 22:18:33 +000025public:
26 explicit Thumb1InstrInfo(const ARMSubtarget &STI);
27
Hans Wennborg9b9a5352017-04-21 21:48:41 +000028 /// Return the noop instruction to use for a noop.
29 void getNoop(MCInst &NopInst) const override;
Jim Grosbach617f84dd2012-02-28 23:53:30 +000030
David Goodwinaf7451b2009-07-08 16:09:28 +000031 // Return the non-pre/post incrementing version of 'Opc'. Return 0
32 // if there is not such an opcode.
Craig Topper6bc27bf2014-03-10 02:09:33 +000033 unsigned getUnindexedOpcode(unsigned Opc) const override;
David Goodwinaf7451b2009-07-08 16:09:28 +000034
David Goodwinade05a32009-07-02 22:18:33 +000035 /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As
36 /// such, whenever a client has an instance of instruction info, it should
37 /// always be able to get register info as well (through this method).
38 ///
Eric Christopherae326492015-03-12 22:48:50 +000039 const ThumbRegisterInfo &getRegisterInfo() const override { return RI; }
David Goodwinade05a32009-07-02 22:18:33 +000040
Benjamin Kramerbdc49562016-06-12 15:39:02 +000041 void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
42 const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
Craig Topper6bc27bf2014-03-10 02:09:33 +000043 bool KillSrc) const override;
David Goodwinade05a32009-07-02 22:18:33 +000044 void storeRegToStackSlot(MachineBasicBlock &MBB,
Eric Christopherd2466682010-10-15 22:49:28 +000045 MachineBasicBlock::iterator MBBI,
46 unsigned SrcReg, bool isKill, int FrameIndex,
Evan Chengefb126a2010-05-06 19:06:44 +000047 const TargetRegisterClass *RC,
Craig Topper6bc27bf2014-03-10 02:09:33 +000048 const TargetRegisterInfo *TRI) const override;
David Goodwinade05a32009-07-02 22:18:33 +000049
David Goodwinade05a32009-07-02 22:18:33 +000050 void loadRegFromStackSlot(MachineBasicBlock &MBB,
Eric Christopherd2466682010-10-15 22:49:28 +000051 MachineBasicBlock::iterator MBBI,
52 unsigned DestReg, int FrameIndex,
Evan Chengefb126a2010-05-06 19:06:44 +000053 const TargetRegisterClass *RC,
Craig Topper6bc27bf2014-03-10 02:09:33 +000054 const TargetRegisterInfo *TRI) const override;
David Goodwinade05a32009-07-02 22:18:33 +000055
Roger Ferrer Ibanezaea42082018-01-31 09:23:43 +000056 bool canCopyGluedNodeDuringSchedule(SDNode *N) const override;
Akira Hatanakae5b6e0d2014-07-25 19:31:34 +000057private:
Rafael Espindola82f46312016-06-28 15:18:26 +000058 void expandLoadStackGuard(MachineBasicBlock::iterator MI) const override;
David Goodwinade05a32009-07-02 22:18:33 +000059};
Alexander Kornienkof00654e2015-06-23 09:49:53 +000060}
David Goodwinade05a32009-07-02 22:18:33 +000061
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000062#endif