1 //===-- R600InstrInfo.h - R600 Instruction Info Interface -------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Interface definition for R600InstrInfo
12 //===----------------------------------------------------------------------===//
14 #ifndef R600INSTRUCTIONINFO_H_
15 #define R600INSTRUCTIONINFO_H_
18 #include "AMDILInstrInfo.h"
19 #include "R600RegisterInfo.h"
25 class AMDGPUTargetMachine;
28 class MachineFunction;
30 class MachineInstrBuilder;
32 class R600InstrInfo : public AMDGPUInstrInfo {
34 const R600RegisterInfo RI;
37 explicit R600InstrInfo(AMDGPUTargetMachine &tm);
39 const R600RegisterInfo &getRegisterInfo() const;
40 virtual void copyPhysReg(MachineBasicBlock &MBB,
41 MachineBasicBlock::iterator MI, DebugLoc DL,
42 unsigned DestReg, unsigned SrcReg,
45 bool isTrig(const MachineInstr &MI) const;
47 /// isVector - Vector instructions are instructions that must fill all
48 /// instruction slots within an instruction group.
49 bool isVector(const MachineInstr &MI) const;
51 virtual MachineInstr * getMovImmInstr(MachineFunction *MF, unsigned DstReg,
54 virtual unsigned getIEQOpcode() const;
55 virtual bool isMov(unsigned Opcode) const;
57 DFAPacketizer *CreateTargetScheduleState(const TargetMachine *TM,
58 const ScheduleDAG *DAG) const;
61 } // End llvm namespace
63 namespace R600_InstFlag {
65 TRANS_ONLY = (1 << 0),
75 #endif // R600INSTRINFO_H_