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 14280031Sdim#ifndef LLVM_LIB_TARGET_MIPS_MIPS16ISELLOWERING_H 15280031Sdim#define LLVM_LIB_TARGET_MIPS_MIPS16ISELLOWERING_H 16249259Sdim 17249259Sdim#include "MipsISelLowering.h" 18249259Sdim 19249259Sdimnamespace llvm { 20249259Sdim class Mips16TargetLowering : public MipsTargetLowering { 21249259Sdim public: 22280031Sdim explicit Mips16TargetLowering(const MipsTargetMachine &TM, 23276479Sdim const MipsSubtarget &STI); 24249259Sdim 25280031Sdim bool allowsMisalignedMemoryAccesses(EVT VT, unsigned AddrSpace, 26280031Sdim unsigned Align, 27280031Sdim bool *Fast) const override; 28249259Sdim 29276479Sdim MachineBasicBlock * 30276479Sdim EmitInstrWithCustomInserter(MachineInstr *MI, 31276479Sdim MachineBasicBlock *MBB) const override; 32249259Sdim 33249259Sdim private: 34277320Sdim bool isEligibleForTailCallOptimization( 35277320Sdim const CCState &CCInfo, unsigned NextStackOffset, 36277320Sdim const MipsFunctionInfo &FI) const override; 37249259Sdim 38249259Sdim void setMips16HardFloatLibCalls(); 39249259Sdim 40249259Sdim unsigned int 41249259Sdim getMips16HelperFunctionStubNumber(ArgListTy &Args) const; 42249259Sdim 43249259Sdim const char *getMips16HelperFunction 44249259Sdim (Type* RetTy, ArgListTy &Args, bool &needHelper) const; 45249259Sdim 46276479Sdim void 47249259Sdim getOpndList(SmallVectorImpl<SDValue> &Ops, 48249259Sdim std::deque< std::pair<unsigned, SDValue> > &RegsToPass, 49249259Sdim bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage, 50280031Sdim bool IsCallReloc, CallLoweringInfo &CLI, SDValue Callee, 51276479Sdim SDValue Chain) const override; 52249259Sdim 53249259Sdim MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr *MI, 54249259Sdim MachineBasicBlock *BB) const; 55249259Sdim 56249259Sdim MachineBasicBlock *emitSeliT16(unsigned Opc1, unsigned Opc2, 57249259Sdim MachineInstr *MI, 58249259Sdim MachineBasicBlock *BB) const; 59249259Sdim 60249259Sdim MachineBasicBlock *emitSelT16(unsigned Opc1, unsigned Opc2, 61249259Sdim MachineInstr *MI, 62249259Sdim MachineBasicBlock *BB) const; 63249259Sdim 64249259Sdim MachineBasicBlock *emitFEXT_T8I816_ins(unsigned BtOpc, unsigned CmpOpc, 65249259Sdim MachineInstr *MI, 66249259Sdim MachineBasicBlock *BB) const; 67249259Sdim 68249259Sdim MachineBasicBlock *emitFEXT_T8I8I16_ins( 69261991Sdim unsigned BtOpc, unsigned CmpiOpc, unsigned CmpiXOpc, bool ImmSigned, 70249259Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 71249259Sdim 72249259Sdim MachineBasicBlock *emitFEXT_CCRX16_ins( 73249259Sdim unsigned SltOpc, 74249259Sdim MachineInstr *MI, MachineBasicBlock *BB) const; 75249259Sdim 76249259Sdim MachineBasicBlock *emitFEXT_CCRXI16_ins( 77249259Sdim unsigned SltiOpc, unsigned SltiXOpc, 78249259Sdim MachineInstr *MI, MachineBasicBlock *BB )const; 79249259Sdim }; 80249259Sdim} 81249259Sdim 82280031Sdim#endif 83