MipsModuleISelDAGToDAG.h revision dce4a407a24b04eebc6a376f8e62b41aaa7b071f
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//===----------------------------------------------------------------------===// 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 const char *getPassName() const override { 45 return "MIPS DAG->DAG Pattern Instruction Selection"; 46 } 47 48 bool runOnMachineFunction(MachineFunction &MF) override; 49 50protected: 51 /// Keep a pointer to the MipsSubtarget around so that we can make the right 52 /// decision when generating code for different targets. 53 const TargetMachine &TM; 54 const MipsSubtarget &Subtarget; 55}; 56 57/// createMipsISelDag - This pass converts a legalized DAG into a 58/// MIPS-specific DAG, ready for instruction scheduling. 59FunctionPass *createMipsModuleISelDag(MipsTargetMachine &TM); 60} 61 62#endif 63