| //===----------------------------------------------------------------------===// | |
| // Instruction Selector Subtarget Control | |
| //===----------------------------------------------------------------------===// | |
| //===----------------------------------------------------------------------===// | |
| // This file defines a pass used to change the subtarget for the | |
| // Mips Instruction selector. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "Mips.h" | |
| #include "MipsTargetMachine.h" | |
| #include "llvm/CodeGen/TargetPassConfig.h" | |
| #include "llvm/CodeGen/StackProtector.h" | |
| #include "llvm/Support/Debug.h" | |
| #include "llvm/Support/raw_ostream.h" | |
| using namespace llvm; | |
| #define DEBUG_TYPE "mips-isel" | |
| namespace { | |
| class MipsModuleDAGToDAGISel : public MachineFunctionPass { | |
| public: | |
| static char ID; | |
| MipsModuleDAGToDAGISel() : MachineFunctionPass(ID) {} | |
| // Pass Name | |
| StringRef getPassName() const override { | |
| return "MIPS DAG->DAG Pattern Instruction Selection"; | |
| } | |
| void getAnalysisUsage(AnalysisUsage &AU) const override { | |
| AU.addRequired<TargetPassConfig>(); | |
| AU.addPreserved<StackProtector>(); | |
| MachineFunctionPass::getAnalysisUsage(AU); | |
| } | |
| bool runOnMachineFunction(MachineFunction &MF) override; | |
| }; | |
| char MipsModuleDAGToDAGISel::ID = 0; | |
| } | |
| bool MipsModuleDAGToDAGISel::runOnMachineFunction(MachineFunction &MF) { | |
| LLVM_DEBUG(errs() << "In MipsModuleDAGToDAGISel::runMachineFunction\n"); | |
| auto &TPC = getAnalysis<TargetPassConfig>(); | |
| auto &TM = TPC.getTM<MipsTargetMachine>(); | |
| TM.resetSubtarget(&MF); | |
| return false; | |
| } | |
| llvm::FunctionPass *llvm::createMipsModuleISelDagPass() { | |
| return new MipsModuleDAGToDAGISel(); | |
| } |