//===---- MipsModuleISelDAGToDAG.h - Change Subtarget --------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines a pass used to change the subtarget for the // Mips Instruction selector. // //===----------------------------------------------------------------------===// #ifndef MIPSMODULEISELDAGTODAG_H #define MIPSMODULEISELDAGTODAG_H #include "Mips.h" #include "MipsSubtarget.h" #include "MipsTargetMachine.h" #include "llvm/CodeGen/SelectionDAGISel.h" //===----------------------------------------------------------------------===// // Instruction Selector Implementation //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // MipsModuleDAGToDAGISel - MIPS specific code to select MIPS machine // instructions for SelectionDAG operations. //===----------------------------------------------------------------------===// namespace llvm { class MipsModuleDAGToDAGISel : public MachineFunctionPass { public: static char ID; explicit MipsModuleDAGToDAGISel(MipsTargetMachine &TM_) : MachineFunctionPass(ID), TM(TM_), Subtarget(TM.getSubtarget<MipsSubtarget>()) {} // Pass Name virtual const char *getPassName() const { return "MIPS DAG->DAG Pattern Instruction Selection"; } virtual bool runOnMachineFunction(MachineFunction &MF); virtual SDNode *Select(SDNode *N) { llvm_unreachable("unexpected"); } protected: /// Keep a pointer to the MipsSubtarget around so that we can make the right /// decision when generating code for different targets. const TargetMachine &TM; const MipsSubtarget &Subtarget; }; /// createMipsISelDag - This pass converts a legalized DAG into a /// MIPS-specific DAG, ready for instruction scheduling. FunctionPass *createMipsModuleISelDag(MipsTargetMachine &TM); } #endif