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