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 LLVM_LIB_TARGET_MIPS_MIPSMODULEISELDAGTODAG_H
16 #define LLVM_LIB_TARGET_MIPS_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 
MipsModuleDAGToDAGISel(MipsTargetMachine & TM_)39   explicit MipsModuleDAGToDAGISel(MipsTargetMachine &TM_)
40       : MachineFunctionPass(ID), TM(TM_) {}
41 
42   // Pass Name
getPassName()43   const char *getPassName() const override {
44     return "MIPS DAG->DAG Pattern Instruction Selection";
45   }
46 
47   bool runOnMachineFunction(MachineFunction &MF) override;
48 
49 protected:
50   MipsTargetMachine &TM;
51 };
52 
53 /// createMipsISelDag - This pass converts a legalized DAG into a
54 /// MIPS-specific DAG, ready for instruction scheduling.
55 FunctionPass *createMipsModuleISelDag(MipsTargetMachine &TM);
56 }
57 
58 #endif
59