]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/llvm/lib/Target/Mips/MipsModuleISelDAGToDAG.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / llvm / lib / Target / Mips / MipsModuleISelDAGToDAG.h
1 //===---- MipsModuleISelDAGToDAG.h -  Change Subtarget             --------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines a pass used to change the subtarget for the
11 // Mips Instruction selector.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef MIPSMODULEISELDAGTODAG_H
16 #define MIPSMODULEISELDAGTODAG_H
17
18 #include "Mips.h"
19 #include "MipsSubtarget.h"
20 #include "MipsTargetMachine.h"
21 #include "llvm/CodeGen/SelectionDAGISel.h"
22
23
24 //===----------------------------------------------------------------------===//
25 // Instruction Selector Implementation
26 //===----------------------------------------------------------------------===//
27
28 //===----------------------------------------------------------------------===//
29 // MipsModuleDAGToDAGISel - MIPS specific code to select MIPS machine
30 // instructions for SelectionDAG operations.
31 //===----------------------------------------------------------------------===//
32 namespace llvm {
33
34 class MipsModuleDAGToDAGISel : public MachineFunctionPass {
35 public:
36
37   static char ID;
38
39   explicit MipsModuleDAGToDAGISel(MipsTargetMachine &TM_)
40     : MachineFunctionPass(ID),
41       TM(TM_), Subtarget(TM.getSubtarget<MipsSubtarget>()) {}
42
43   // Pass Name
44   virtual const char *getPassName() const {
45     return "MIPS DAG->DAG Pattern Instruction Selection";
46   }
47
48   virtual bool runOnMachineFunction(MachineFunction &MF);
49
50   virtual SDNode *Select(SDNode *N) {
51     llvm_unreachable("unexpected");
52   }
53
54 protected:
55   /// Keep a pointer to the MipsSubtarget around so that we can make the right
56   /// decision when generating code for different targets.
57   const TargetMachine &TM;
58   const MipsSubtarget &Subtarget;
59 };
60
61 /// createMipsISelDag - This pass converts a legalized DAG into a
62 /// MIPS-specific DAG, ready for instruction scheduling.
63 FunctionPass *createMipsModuleISelDag(MipsTargetMachine &TM);
64 }
65
66 #endif