LLVM  3.7.0
Thumb2InstrInfo.h
Go to the documentation of this file.
1 //===-- Thumb2InstrInfo.h - Thumb-2 Instruction Information -----*- C++ -*-===//
2 //
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-2 implementation of the TargetInstrInfo class.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_TARGET_ARM_THUMB2INSTRINFO_H
15 #define LLVM_LIB_TARGET_ARM_THUMB2INSTRINFO_H
16 
17 #include "ARMBaseInstrInfo.h"
18 #include "ThumbRegisterInfo.h"
19 
20 namespace llvm {
21 class ARMSubtarget;
22 class ScheduleHazardRecognizer;
23 
26 public:
27  explicit Thumb2InstrInfo(const ARMSubtarget &STI);
28 
29  /// getNoopForMachoTarget - Return the noop instruction to use for a noop.
30  void getNoopForMachoTarget(MCInst &NopInst) const override;
31 
32  // Return the non-pre/post incrementing version of 'Opc'. Return 0
33  // if there is not such an opcode.
34  unsigned getUnindexedOpcode(unsigned Opc) const override;
35 
37  MachineBasicBlock *NewDest) const override;
38 
40  MachineBasicBlock::iterator MBBI) const override;
41 
44  unsigned DestReg, unsigned SrcReg,
45  bool KillSrc) const override;
46 
49  unsigned SrcReg, bool isKill, int FrameIndex,
50  const TargetRegisterClass *RC,
51  const TargetRegisterInfo *TRI) const override;
52 
55  unsigned DestReg, int FrameIndex,
56  const TargetRegisterClass *RC,
57  const TargetRegisterInfo *TRI) const override;
58 
59  /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As
60  /// such, whenever a client has an instance of instruction info, it should
61  /// always be able to get register info as well (through this method).
62  ///
63  const ThumbRegisterInfo &getRegisterInfo() const override { return RI; }
64 
65 private:
66  void expandLoadStackGuard(MachineBasicBlock::iterator MI,
67  Reloc::Model RM) const override;
68 };
69 
70 /// getITInstrPredicate - Valid only in Thumb2 mode. This function is identical
71 /// to llvm::getInstrPredicate except it returns AL for conditional branch
72 /// instructions which are "predicated", but are not in IT blocks.
73 ARMCC::CondCodes getITInstrPredicate(const MachineInstr *MI, unsigned &PredReg);
74 
75 
76 }
77 
78 #endif
void storeRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned SrcReg, bool isKill, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI) const override
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, DebugLoc DL, unsigned DestReg, unsigned SrcReg, bool KillSrc) const override
A debug info location.
Definition: DebugLoc.h:34
ARMCC::CondCodes getITInstrPredicate(const MachineInstr *MI, unsigned &PredReg)
getITInstrPredicate - Valid only in Thumb2 mode.
void getNoopForMachoTarget(MCInst &NopInst) const override
getNoopForMachoTarget - Return the noop instruction to use for a noop.
bool isLegalToSplitMBBAt(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI) const override
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:150
void loadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned DestReg, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI) const override
bundle_iterator< MachineInstr, instr_iterator > iterator
unsigned getUnindexedOpcode(unsigned Opc) const override
bundle_iterator - MachineBasicBlock iterator that automatically skips over MIs that are inside bundle...
Thumb2InstrInfo(const ARMSubtarget &STI)
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
void ReplaceTailWithBranchTo(MachineBasicBlock::iterator Tail, MachineBasicBlock *NewDest) const override
const ThumbRegisterInfo & getRegisterInfo() const override
getRegisterInfo - TargetInstrInfo is a superset of MRegister info.
#define I(x, y, z)
Definition: MD5.cpp:54