Mips16ISelLowering.h revision 263508
18813Srgallard//===-- Mips16ISelLowering.h - Mips16 DAG Lowering Interface ----*- C++ -*-===// 212442Smfang// 312442Smfang// The LLVM Compiler Infrastructure 412442Smfang// 512442Smfang// This file is distributed under the University of Illinois Open Source 612442Smfang// License. See LICENSE.TXT for details. 712442Smfang// 812442Smfang//===----------------------------------------------------------------------===// 912442Smfang// 1012442Smfang// Subclass of MipsTargetLowering specialized for mips16. 1112442Smfang// 1212442Smfang//===----------------------------------------------------------------------===// 1312442Smfang 1412442Smfang#ifndef Mips16ISELLOWERING_H 1512442Smfang#define Mips16ISELLOWERING_H 1612442Smfang 1712442Smfang#include "MipsISelLowering.h" 1812442Smfang 1912442Smfangnamespace llvm { 2012442Smfang class Mips16TargetLowering : public MipsTargetLowering { 2112442Smfang public: 2212442Smfang explicit Mips16TargetLowering(MipsTargetMachine &TM); 238813Srgallard 248813Srgallard virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const; 258813Srgallard 268813Srgallard virtual MachineBasicBlock * 278813Srgallard EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *MBB) const; 288813Srgallard 298813Srgallard private: 308813Srgallard virtual bool 3112442Smfang isEligibleForTailCallOptimization(const MipsCC &MipsCCInfo, 3212442Smfang unsigned NextStackOffset, 3312442Smfang const MipsFunctionInfo& FI) const; 3412442Smfang 3512442Smfang void setMips16HardFloatLibCalls(); 3612442Smfang 3712442Smfang unsigned int 3812442Smfang getMips16HelperFunctionStubNumber(ArgListTy &Args) const; 3912442Smfang 4012442Smfang const char *getMips16HelperFunction 4112442Smfang (Type* RetTy, ArgListTy &Args, bool &needHelper) const; 4212442Smfang 4312442Smfang virtual void 4412442Smfang getOpndList(SmallVectorImpl<SDValue> &Ops, 4512442Smfang std::deque< std::pair<unsigned, SDValue> > &RegsToPass, 4612442Smfang bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage, 4712442Smfang CallLoweringInfo &CLI, SDValue Callee, SDValue Chain) const; 4812442Smfang 4912442Smfang MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr *MI, 508813Srgallard MachineBasicBlock *BB) const; 518813Srgallard 528813Srgallard MachineBasicBlock *emitSeliT16(unsigned Opc1, unsigned Opc2, 538813Srgallard MachineInstr *MI, 548813Srgallard MachineBasicBlock *BB) const; 558813Srgallard 568813Srgallard MachineBasicBlock *emitSelT16(unsigned Opc1, unsigned Opc2, 578813Srgallard MachineInstr *MI, 588813Srgallard MachineBasicBlock *BB) const; 598813Srgallard 608813Srgallard MachineBasicBlock *emitFEXT_T8I816_ins(unsigned BtOpc, unsigned CmpOpc, 618813Srgallard MachineInstr *MI, 628813Srgallard MachineBasicBlock *BB) const; 638813Srgallard 648956Srgallard MachineBasicBlock *emitFEXT_T8I8I16_ins( 658813Srgallard unsigned BtOpc, unsigned CmpiOpc, unsigned CmpiXOpc, bool ImmSigned, 668813Srgallard MachineInstr *MI, MachineBasicBlock *BB) const; 678813Srgallard 688813Srgallard MachineBasicBlock *emitFEXT_CCRX16_ins( 698813Srgallard unsigned SltOpc, 708813Srgallard MachineInstr *MI, MachineBasicBlock *BB) const; 718813Srgallard 728813Srgallard MachineBasicBlock *emitFEXT_CCRXI16_ins( 738813Srgallard unsigned SltiOpc, unsigned SltiXOpc, 748813Srgallard MachineInstr *MI, MachineBasicBlock *BB )const; 758813Srgallard }; 768813Srgallard} 778813Srgallard 788813Srgallard#endif // Mips16ISELLOWERING_H 798813Srgallard