Mips16ISelLowering.h revision 249259
1279377Simp//===-- Mips16ISelLowering.h - Mips16 DAG Lowering Interface ----*- C++ -*-===//
2279377Simp//
3279377Simp//                     The LLVM Compiler Infrastructure
4279377Simp//
5279377Simp// This file is distributed under the University of Illinois Open Source
6279377Simp// License. See LICENSE.TXT for details.
7279377Simp//
8279377Simp//===----------------------------------------------------------------------===//
9279377Simp//
10279377Simp// Subclass of MipsTargetLowering specialized for mips16.
11279377Simp//
12279377Simp//===----------------------------------------------------------------------===//
13279377Simp
14279377Simp#ifndef Mips16ISELLOWERING_H
15279377Simp#define Mips16ISELLOWERING_H
16279377Simp
17279377Simp#include "MipsISelLowering.h"
18279377Simp
19279377Simpnamespace llvm {
20279377Simp  class Mips16TargetLowering : public MipsTargetLowering  {
21279377Simp  public:
22279377Simp    explicit Mips16TargetLowering(MipsTargetMachine &TM);
23279377Simp
24279377Simp    virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const;
25279377Simp
26279377Simp    virtual MachineBasicBlock *
27279377Simp    EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *MBB) const;
28279377Simp
29279377Simp  private:
30279377Simp    virtual bool
31279377Simp    isEligibleForTailCallOptimization(const MipsCC &MipsCCInfo,
32279377Simp                                      unsigned NextStackOffset,
33279377Simp                                      const MipsFunctionInfo& FI) const;
34279377Simp
35279377Simp    void setMips16LibcallName(RTLIB::Libcall, const char *Name);
36279377Simp
37279377Simp    void setMips16HardFloatLibCalls();
38279377Simp
39279377Simp    unsigned int
40279377Simp      getMips16HelperFunctionStubNumber(ArgListTy &Args) const;
41279377Simp
42279377Simp    const char *getMips16HelperFunction
43279377Simp      (Type* RetTy, ArgListTy &Args, bool &needHelper) const;
44279377Simp
45279377Simp    virtual void
46279377Simp    getOpndList(SmallVectorImpl<SDValue> &Ops,
47279377Simp                std::deque< std::pair<unsigned, SDValue> > &RegsToPass,
48279377Simp                bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage,
49279377Simp                CallLoweringInfo &CLI, SDValue Callee, SDValue Chain) const;
50279377Simp
51279377Simp    MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr *MI,
52279377Simp                                 MachineBasicBlock *BB) const;
53279377Simp
54279377Simp    MachineBasicBlock *emitSeliT16(unsigned Opc1, unsigned Opc2,
55279377Simp                                   MachineInstr *MI,
56279377Simp                                   MachineBasicBlock *BB) const;
57279377Simp
58279377Simp    MachineBasicBlock *emitSelT16(unsigned Opc1, unsigned Opc2,
59279377Simp                                  MachineInstr *MI,
60279377Simp                                  MachineBasicBlock *BB) const;
61279377Simp
62279377Simp    MachineBasicBlock *emitFEXT_T8I816_ins(unsigned BtOpc, unsigned CmpOpc,
63279377Simp                                           MachineInstr *MI,
64279377Simp                                           MachineBasicBlock *BB) const;
65279377Simp
66279377Simp    MachineBasicBlock *emitFEXT_T8I8I16_ins(
67279377Simp      unsigned BtOpc, unsigned CmpiOpc, unsigned CmpiXOpc,
68279377Simp      MachineInstr *MI,  MachineBasicBlock *BB) const;
69279377Simp
70279377Simp    MachineBasicBlock *emitFEXT_CCRX16_ins(
71279377Simp      unsigned SltOpc,
72279377Simp      MachineInstr *MI,  MachineBasicBlock *BB) const;
73279377Simp
74279377Simp    MachineBasicBlock *emitFEXT_CCRXI16_ins(
75279377Simp      unsigned SltiOpc, unsigned SltiXOpc,
76279377Simp      MachineInstr *MI,  MachineBasicBlock *BB )const;
77279377Simp  };
78279377Simp}
79279377Simp
80279377Simp#endif // Mips16ISELLOWERING_H
81279377Simp