Mips16ISelLowering.h revision 263508
1193323Sed//===-- Mips16ISelLowering.h - Mips16 DAG Lowering Interface ----*- C++ -*-===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// Subclass of MipsTargetLowering specialized for mips16. 11249423Sdim// 12249423Sdim//===----------------------------------------------------------------------===// 13249423Sdim 14193323Sed#ifndef Mips16ISELLOWERING_H 15201360Srdivacky#define Mips16ISELLOWERING_H 16198090Srdivacky 17193323Sed#include "MipsISelLowering.h" 18193323Sed 19263508Sdimnamespace llvm { 20263508Sdim class Mips16TargetLowering : public MipsTargetLowering { 21263508Sdim public: 22263508Sdim explicit Mips16TargetLowering(MipsTargetMachine &TM); 23193323Sed 24263508Sdim virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const; 25263508Sdim 26193323Sed virtual MachineBasicBlock * 27263508Sdim EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *MBB) const; 28263508Sdim 29263508Sdim private: 30193323Sed virtual bool 31263508Sdim isEligibleForTailCallOptimization(const MipsCC &MipsCCInfo, 32263508Sdim unsigned NextStackOffset, 33263508Sdim const MipsFunctionInfo& FI) const; 34263508Sdim 35263508Sdim void setMips16HardFloatLibCalls(); 36263508Sdim 37218893Sdim unsigned int 38193323Sed getMips16HelperFunctionStubNumber(ArgListTy &Args) const; 39193323Sed 40263508Sdim const char *getMips16HelperFunction 41263508Sdim (Type* RetTy, ArgListTy &Args, bool &needHelper) const; 42263508Sdim 43193323Sed virtual void 44263508Sdim getOpndList(SmallVectorImpl<SDValue> &Ops, 45263508Sdim std::deque< std::pair<unsigned, SDValue> > &RegsToPass, 46263508Sdim bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage, 47263508Sdim CallLoweringInfo &CLI, SDValue Callee, SDValue Chain) const; 48263508Sdim 49263508Sdim MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr *MI, 50263508Sdim MachineBasicBlock *BB) const; 51263508Sdim 52263508Sdim MachineBasicBlock *emitSeliT16(unsigned Opc1, unsigned Opc2, 53263508Sdim MachineInstr *MI, 54263508Sdim MachineBasicBlock *BB) const; 55263508Sdim 56263508Sdim MachineBasicBlock *emitSelT16(unsigned Opc1, unsigned Opc2, 57263508Sdim MachineInstr *MI, 58263508Sdim MachineBasicBlock *BB) const; 59263508Sdim 60263508Sdim MachineBasicBlock *emitFEXT_T8I816_ins(unsigned BtOpc, unsigned CmpOpc, 61263508Sdim MachineInstr *MI, 62198090Srdivacky MachineBasicBlock *BB) const; 63263508Sdim 64193323Sed MachineBasicBlock *emitFEXT_T8I8I16_ins( 65263508Sdim unsigned BtOpc, unsigned CmpiOpc, unsigned CmpiXOpc, bool ImmSigned, 66263508Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 67263508Sdim 68193323Sed MachineBasicBlock *emitFEXT_CCRX16_ins( 69263508Sdim unsigned SltOpc, 70263508Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 71193323Sed 72263508Sdim MachineBasicBlock *emitFEXT_CCRXI16_ins( 73263508Sdim unsigned SltiOpc, unsigned SltiXOpc, 74263508Sdim MachineInstr *MI, MachineBasicBlock *BB )const; 75263508Sdim }; 76193323Sed} 77263508Sdim 78263508Sdim#endif // Mips16ISELLOWERING_H 79263508Sdim