1a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler//===----------------------------------------------------------------------===// 2a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler// Instruction Selector Subtarget Control 3a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler//===----------------------------------------------------------------------===// 4a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler 5a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler//===----------------------------------------------------------------------===// 6a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler// This file defines a pass used to change the subtarget for the 7a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler// Mips Instruction selector. 8a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler// 9a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler//===----------------------------------------------------------------------===// 10a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler 114c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar#include "Mips.h" 124c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar#include "MipsTargetMachine.h" 13a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler#include "llvm/Support/Debug.h" 14a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler#include "llvm/Support/raw_ostream.h" 15a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler 164c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarusing namespace llvm; 174c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DEBUG_TYPE "mips-isel" 19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 204c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarnamespace { 214c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar class MipsModuleDAGToDAGISel : public MachineFunctionPass { 224c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar public: 234c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar static char ID; 244c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 254c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar explicit MipsModuleDAGToDAGISel(MipsTargetMachine &TM_) 264c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar : MachineFunctionPass(ID), TM(TM_) {} 274c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 284c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar // Pass Name 294c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar const char *getPassName() const override { 304c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar return "MIPS DAG->DAG Pattern Instruction Selection"; 314c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar } 324c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 334c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar bool runOnMachineFunction(MachineFunction &MF) override; 344c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 354c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar protected: 364c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar MipsTargetMachine &TM; 374c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar }; 384c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 394c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar char MipsModuleDAGToDAGISel::ID = 0; 404c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar} 41a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler 42a430cb613b6e93c05f128b04323c57acfd08686dReed Kotlerbool MipsModuleDAGToDAGISel::runOnMachineFunction(MachineFunction &MF) { 43a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler DEBUG(errs() << "In MipsModuleDAGToDAGISel::runMachineFunction\n"); 4437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines TM.resetSubtarget(&MF); 45a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler return false; 46a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler} 47a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler 484c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarllvm::FunctionPass *llvm::createMipsModuleISelDagPass(MipsTargetMachine &TM) { 49a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler return new MipsModuleDAGToDAGISel(TM); 50a430cb613b6e93c05f128b04323c57acfd08686dReed Kotler} 51