MipsSEISelDAGToDAG.h revision 2fd3e67dc6438cee5e32e0d7d7d42891df7edd96
1//===-- MipsSEISelDAGToDAG.h - A Dag to Dag Inst Selector for MipsSE -----===// 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// Subclass of MipsDAGToDAGISel specialized for mips32/64. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef MIPSSEISELDAGTODAG_H 15#define MIPSSEISELDAGTODAG_H 16 17#include "MipsISelDAGToDAG.h" 18 19namespace llvm { 20 21class MipsSEDAGToDAGISel : public MipsDAGToDAGISel { 22 23public: 24 explicit MipsSEDAGToDAGISel(MipsTargetMachine &TM) : MipsDAGToDAGISel(TM) {} 25 26private: 27 28 virtual bool runOnMachineFunction(MachineFunction &MF); 29 30 void addDSPCtrlRegOperands(bool IsDef, MachineInstr &MI, 31 MachineFunction &MF); 32 33 unsigned getMSACtrlReg(const SDValue RegIdx) const; 34 35 bool replaceUsesWithZeroReg(MachineRegisterInfo *MRI, const MachineInstr&); 36 37 std::pair<SDNode*, SDNode*> selectMULT(SDNode *N, unsigned Opc, SDLoc dl, 38 EVT Ty, bool HasLo, bool HasHi); 39 40 SDNode *selectAddESubE(unsigned MOp, SDValue InFlag, SDValue CmpLHS, 41 SDLoc DL, SDNode *Node) const; 42 43 virtual bool selectAddrRegImm(SDValue Addr, SDValue &Base, 44 SDValue &Offset) const; 45 46 virtual bool selectAddrRegReg(SDValue Addr, SDValue &Base, 47 SDValue &Offset) const; 48 49 virtual bool selectAddrDefault(SDValue Addr, SDValue &Base, 50 SDValue &Offset) const; 51 52 virtual bool selectIntAddr(SDValue Addr, SDValue &Base, 53 SDValue &Offset) const; 54 55 virtual bool selectAddrRegImm12(SDValue Addr, SDValue &Base, 56 SDValue &Offset) const; 57 58 virtual bool selectIntAddrMM(SDValue Addr, SDValue &Base, 59 SDValue &Offset) const; 60 61 virtual std::pair<bool, SDNode*> selectNode(SDNode *Node); 62 63 virtual void processFunctionAfterISel(MachineFunction &MF); 64 65 // Insert instructions to initialize the global base register in the 66 // first MBB of the function. 67 void initGlobalBaseReg(MachineFunction &MF); 68}; 69 70FunctionPass *createMipsSEISelDag(MipsTargetMachine &TM); 71 72} 73 74#endif 75