Mips16ISelLowering.h revision 249259
1249259Sdim//===-- Mips16ISelLowering.h - Mips16 DAG Lowering Interface ----*- C++ -*-===// 2249259Sdim// 3249259Sdim// The LLVM Compiler Infrastructure 4249259Sdim// 5249259Sdim// This file is distributed under the University of Illinois Open Source 6249259Sdim// License. See LICENSE.TXT for details. 7249259Sdim// 8249259Sdim//===----------------------------------------------------------------------===// 9249259Sdim// 10249259Sdim// Subclass of MipsTargetLowering specialized for mips16. 11249259Sdim// 12249259Sdim//===----------------------------------------------------------------------===// 13249259Sdim 14249259Sdim#ifndef Mips16ISELLOWERING_H 15249259Sdim#define Mips16ISELLOWERING_H 16249259Sdim 17249259Sdim#include "MipsISelLowering.h" 18249259Sdim 19249259Sdimnamespace llvm { 20249259Sdim class Mips16TargetLowering : public MipsTargetLowering { 21249259Sdim public: 22249259Sdim explicit Mips16TargetLowering(MipsTargetMachine &TM); 23249259Sdim 24249259Sdim virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const; 25249259Sdim 26249259Sdim virtual MachineBasicBlock * 27249259Sdim EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *MBB) const; 28249259Sdim 29249259Sdim private: 30249259Sdim virtual bool 31249259Sdim isEligibleForTailCallOptimization(const MipsCC &MipsCCInfo, 32249259Sdim unsigned NextStackOffset, 33249259Sdim const MipsFunctionInfo& FI) const; 34249259Sdim 35249259Sdim void setMips16LibcallName(RTLIB::Libcall, const char *Name); 36249259Sdim 37249259Sdim void setMips16HardFloatLibCalls(); 38249259Sdim 39249259Sdim unsigned int 40249259Sdim getMips16HelperFunctionStubNumber(ArgListTy &Args) const; 41249259Sdim 42249259Sdim const char *getMips16HelperFunction 43249259Sdim (Type* RetTy, ArgListTy &Args, bool &needHelper) const; 44249259Sdim 45249259Sdim virtual void 46249259Sdim getOpndList(SmallVectorImpl<SDValue> &Ops, 47249259Sdim std::deque< std::pair<unsigned, SDValue> > &RegsToPass, 48249259Sdim bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage, 49249259Sdim CallLoweringInfo &CLI, SDValue Callee, SDValue Chain) const; 50249259Sdim 51249259Sdim MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr *MI, 52249259Sdim MachineBasicBlock *BB) const; 53249259Sdim 54249259Sdim MachineBasicBlock *emitSeliT16(unsigned Opc1, unsigned Opc2, 55249259Sdim MachineInstr *MI, 56249259Sdim MachineBasicBlock *BB) const; 57249259Sdim 58249259Sdim MachineBasicBlock *emitSelT16(unsigned Opc1, unsigned Opc2, 59249259Sdim MachineInstr *MI, 60249259Sdim MachineBasicBlock *BB) const; 61249259Sdim 62249259Sdim MachineBasicBlock *emitFEXT_T8I816_ins(unsigned BtOpc, unsigned CmpOpc, 63249259Sdim MachineInstr *MI, 64249259Sdim MachineBasicBlock *BB) const; 65249259Sdim 66249259Sdim MachineBasicBlock *emitFEXT_T8I8I16_ins( 67249259Sdim unsigned BtOpc, unsigned CmpiOpc, unsigned CmpiXOpc, 68249259Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 69249259Sdim 70249259Sdim MachineBasicBlock *emitFEXT_CCRX16_ins( 71249259Sdim unsigned SltOpc, 72249259Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 73249259Sdim 74249259Sdim MachineBasicBlock *emitFEXT_CCRXI16_ins( 75249259Sdim unsigned SltiOpc, unsigned SltiXOpc, 76249259Sdim MachineInstr *MI, MachineBasicBlock *BB )const; 77249259Sdim }; 78249259Sdim} 79249259Sdim 80249259Sdim#endif // Mips16ISELLOWERING_H 81