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