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