1 //===---- MipsModuleISelDAGToDAG.h - Change Subtarget --------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines a pass used to change the subtarget for the
11 // Mips Instruction selector.
13 //===----------------------------------------------------------------------===//
15 #ifndef MIPSMODULEISELDAGTODAG_H
16 #define MIPSMODULEISELDAGTODAG_H
19 #include "MipsSubtarget.h"
20 #include "MipsTargetMachine.h"
21 #include "llvm/CodeGen/SelectionDAGISel.h"
24 //===----------------------------------------------------------------------===//
25 // Instruction Selector Implementation
26 //===----------------------------------------------------------------------===//
28 //===----------------------------------------------------------------------===//
29 // MipsModuleDAGToDAGISel - MIPS specific code to select MIPS machine
30 // instructions for SelectionDAG operations.
31 //===----------------------------------------------------------------------===//
34 class MipsModuleDAGToDAGISel : public MachineFunctionPass {
39 explicit MipsModuleDAGToDAGISel(MipsTargetMachine &TM_)
40 : MachineFunctionPass(ID),
41 TM(TM_), Subtarget(TM.getSubtarget<MipsSubtarget>()) {}
44 virtual const char *getPassName() const {
45 return "MIPS DAG->DAG Pattern Instruction Selection";
48 virtual bool runOnMachineFunction(MachineFunction &MF);
50 virtual SDNode *Select(SDNode *N) {
51 llvm_unreachable("unexpected");
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;
61 /// createMipsISelDag - This pass converts a legalized DAG into a
62 /// MIPS-specific DAG, ready for instruction scheduling.
63 FunctionPass *createMipsModuleISelDag(MipsTargetMachine &TM);