Mips16ISelDAGToDAG.h revision 263508
1231200Smm//===---- Mips16ISelDAGToDAG.h - A Dag to Dag Inst Selector for Mips ------===//
2232153Smm//
3231200Smm//                     The LLVM Compiler Infrastructure
4231200Smm//
5231200Smm// This file is distributed under the University of Illinois Open Source
6231200Smm// License. See LICENSE.TXT for details.
7231200Smm//
8231200Smm//===----------------------------------------------------------------------===//
9231200Smm//
10231200Smm// Subclass of MipsDAGToDAGISel specialized for mips16.
11231200Smm//
12231200Smm//===----------------------------------------------------------------------===//
13231200Smm
14231200Smm#ifndef MIPS16ISELDAGTODAG_H
15231200Smm#define MIPS16ISELDAGTODAG_H
16231200Smm
17231200Smm#include "MipsISelDAGToDAG.h"
18231200Smm
19231200Smmnamespace llvm {
20231200Smm
21231200Smmclass Mips16DAGToDAGISel : public MipsDAGToDAGISel {
22231200Smmpublic:
23231200Smm  explicit Mips16DAGToDAGISel(MipsTargetMachine &TM) : MipsDAGToDAGISel(TM) {}
24231200Smm
25231200Smmprivate:
26231200Smm  std::pair<SDNode*, SDNode*> selectMULT(SDNode *N, unsigned Opc, SDLoc DL,
27231200Smm                                         EVT Ty, bool HasLo, bool HasHi);
28231200Smm
29231200Smm  SDValue getMips16SPAliasReg();
30231200Smm
31231200Smm  virtual bool runOnMachineFunction(MachineFunction &MF);
32231200Smm
33231200Smm  void getMips16SPRefReg(SDNode *Parent, SDValue &AliasReg);
34231200Smm
35231200Smm  virtual bool selectAddr16(SDNode *Parent, SDValue N, SDValue &Base,
36231200Smm                            SDValue &Offset, SDValue &Alias);
37231200Smm
38231200Smm  virtual std::pair<bool, SDNode*> selectNode(SDNode *Node);
39231200Smm
40231200Smm  virtual void processFunctionAfterISel(MachineFunction &MF);
41231200Smm
42231200Smm  // Insert instructions to initialize the global base register in the
43231200Smm  // first MBB of the function.
44231200Smm  void initGlobalBaseReg(MachineFunction &MF);
45231200Smm
46231200Smm  void initMips16SPAliasReg(MachineFunction &MF);
47231200Smm};
48231200Smm
49231200SmmFunctionPass *createMips16ISelDag(MipsTargetMachine &TM);
50231200Smm
51231200Smm}
52231200Smm
53231200Smm#endif
54231200Smm