blob: fda35ae288bbe581cd393245d3f2e8f3f0782fac [file] [log] [blame]
Reed Kotler1595f362013-04-09 19:46:01 +00001//===---- 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//===----------------------------------------------------------------------===//
32namespace llvm {
33
34class MipsModuleDAGToDAGISel : public MachineFunctionPass {
35public:
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
54protected:
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.
63FunctionPass *createMipsModuleISelDag(MipsTargetMachine &TM);
64}
65
66#endif