15ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka//===-- Mips16ISelLowering.h - Mips16 DAG Lowering Interface ----*- C++ -*-===// 25ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// 35ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// The LLVM Compiler Infrastructure 45ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// 55ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// This file is distributed under the University of Illinois Open Source 65ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// License. See LICENSE.TXT for details. 75ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// 85ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka//===----------------------------------------------------------------------===// 95ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// 105ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// Subclass of MipsTargetLowering specialized for mips16. 115ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka// 125ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka//===----------------------------------------------------------------------===// 135ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 145ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka#ifndef Mips16ISELLOWERING_H 155ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka#define Mips16ISELLOWERING_H 165ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 175ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka#include "MipsISelLowering.h" 185ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 195ac065a79767cc112eba63136183b7103765d0d3Akira Hatanakanamespace llvm { 205ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka class Mips16TargetLowering : public MipsTargetLowering { 215ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka public: 225ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka explicit Mips16TargetLowering(MipsTargetMachine &TM); 235ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 245ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const; 255ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 265ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka virtual MachineBasicBlock * 275ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *MBB) const; 285ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 295ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka private: 305ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka virtual bool 315ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka isEligibleForTailCallOptimization(const MipsCC &MipsCCInfo, 325ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka unsigned NextStackOffset, 335ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka const MipsFunctionInfo& FI) const; 345ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 355ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka void setMips16HardFloatLibCalls(); 365ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 375ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka unsigned int 385ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka getMips16HelperFunctionStubNumber(ArgListTy &Args) const; 395ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 405ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka const char *getMips16HelperFunction 415ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka (Type* RetTy, ArgListTy &Args, bool &needHelper) const; 425ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 435ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka virtual void 445ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka getOpndList(SmallVectorImpl<SDValue> &Ops, 455ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka std::deque< std::pair<unsigned, SDValue> > &RegsToPass, 465ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage, 475ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka CallLoweringInfo &CLI, SDValue Callee, SDValue Chain) const; 485ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 495ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr *MI, 505ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *BB) const; 515ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 525ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *emitSeliT16(unsigned Opc1, unsigned Opc2, 535ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineInstr *MI, 545ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *BB) const; 555ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 565ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *emitSelT16(unsigned Opc1, unsigned Opc2, 575ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineInstr *MI, 585ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *BB) const; 595ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 605ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *emitFEXT_T8I816_ins(unsigned BtOpc, unsigned CmpOpc, 615ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineInstr *MI, 625ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *BB) const; 635ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 645ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *emitFEXT_T8I8I16_ins( 65b0ee97a366a07c05b2c8ab314e29f5e72a9b7bfbReed Kotler unsigned BtOpc, unsigned CmpiOpc, unsigned CmpiXOpc, bool ImmSigned, 665ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineInstr *MI, MachineBasicBlock *BB) const; 675ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 685ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *emitFEXT_CCRX16_ins( 695ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka unsigned SltOpc, 705ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineInstr *MI, MachineBasicBlock *BB) const; 715ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 725ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineBasicBlock *emitFEXT_CCRXI16_ins( 735ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka unsigned SltiOpc, unsigned SltiXOpc, 745ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka MachineInstr *MI, MachineBasicBlock *BB )const; 755ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka }; 765ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka} 775ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka 785ac065a79767cc112eba63136183b7103765d0d3Akira Hatanaka#endif // Mips16ISELLOWERING_H 79