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 setMips16HardFloatLibCalls(); 36249259Sdim 37249259Sdim unsigned int 38249259Sdim getMips16HelperFunctionStubNumber(ArgListTy &Args) const; 39249259Sdim 40249259Sdim const char *getMips16HelperFunction 41249259Sdim (Type* RetTy, ArgListTy &Args, bool &needHelper) const; 42249259Sdim 43249259Sdim virtual void 44249259Sdim getOpndList(SmallVectorImpl<SDValue> &Ops, 45249259Sdim std::deque< std::pair<unsigned, SDValue> > &RegsToPass, 46249259Sdim bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage, 47249259Sdim CallLoweringInfo &CLI, SDValue Callee, SDValue Chain) const; 48249259Sdim 49249259Sdim MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr *MI, 50249259Sdim MachineBasicBlock *BB) const; 51249259Sdim 52249259Sdim MachineBasicBlock *emitSeliT16(unsigned Opc1, unsigned Opc2, 53249259Sdim MachineInstr *MI, 54249259Sdim MachineBasicBlock *BB) const; 55249259Sdim 56249259Sdim MachineBasicBlock *emitSelT16(unsigned Opc1, unsigned Opc2, 57249259Sdim MachineInstr *MI, 58249259Sdim MachineBasicBlock *BB) const; 59249259Sdim 60249259Sdim MachineBasicBlock *emitFEXT_T8I816_ins(unsigned BtOpc, unsigned CmpOpc, 61249259Sdim MachineInstr *MI, 62249259Sdim MachineBasicBlock *BB) const; 63249259Sdim 64249259Sdim MachineBasicBlock *emitFEXT_T8I8I16_ins( 65263508Sdim unsigned BtOpc, unsigned CmpiOpc, unsigned CmpiXOpc, bool ImmSigned, 66249259Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 67249259Sdim 68249259Sdim MachineBasicBlock *emitFEXT_CCRX16_ins( 69249259Sdim unsigned SltOpc, 70249259Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 71249259Sdim 72249259Sdim MachineBasicBlock *emitFEXT_CCRXI16_ins( 73249259Sdim unsigned SltiOpc, unsigned SltiXOpc, 74249259Sdim MachineInstr *MI, MachineBasicBlock *BB )const; 75249259Sdim }; 76249259Sdim} 77249259Sdim 78249259Sdim#endif // Mips16ISELLOWERING_H 79