blob: ceacaa498389457313391aa6a29cb7d42d4a47f8 [file] [log] [blame]
Reed Kotler1595f362013-04-09 19:46:01 +00001//===----------------------------------------------------------------------===//
2// Instruction Selector Subtarget Control
3//===----------------------------------------------------------------------===//
4
5//===----------------------------------------------------------------------===//
6// This file defines a pass used to change the subtarget for the
7// Mips Instruction selector.
8//
9//===----------------------------------------------------------------------===//
10
Vasileios Kalintiris46fa9b72015-03-14 09:20:52 +000011#include "Mips.h"
Benjamin Kramera52f6962015-03-09 15:50:58 +000012#include "MipsTargetMachine.h"
Francis Visoiu Mistrih8b617642017-05-18 17:21:13 +000013#include "llvm/CodeGen/TargetPassConfig.h"
Reed Kotler1595f362013-04-09 19:46:01 +000014#include "llvm/Support/Debug.h"
Benjamin Kramer16132e62015-03-23 18:07:13 +000015#include "llvm/Support/raw_ostream.h"
Vasileios Kalintiris46fa9b72015-03-14 09:20:52 +000016
Benjamin Kramera52f6962015-03-09 15:50:58 +000017using namespace llvm;
Reed Kotler1595f362013-04-09 19:46:01 +000018
Chandler Carruthe96dd892014-04-21 22:55:11 +000019#define DEBUG_TYPE "mips-isel"
20
Benjamin Kramera52f6962015-03-09 15:50:58 +000021namespace {
Vasileios Kalintiris46fa9b72015-03-14 09:20:52 +000022 class MipsModuleDAGToDAGISel : public MachineFunctionPass {
23 public:
24 static char ID;
Benjamin Kramera52f6962015-03-09 15:50:58 +000025
Francis Visoiu Mistrih8b617642017-05-18 17:21:13 +000026 MipsModuleDAGToDAGISel() : MachineFunctionPass(ID) {}
Benjamin Kramera52f6962015-03-09 15:50:58 +000027
Vasileios Kalintiris46fa9b72015-03-14 09:20:52 +000028 // Pass Name
Mehdi Amini117296c2016-10-01 02:56:57 +000029 StringRef getPassName() const override {
Vasileios Kalintiris46fa9b72015-03-14 09:20:52 +000030 return "MIPS DAG->DAG Pattern Instruction Selection";
31 }
Benjamin Kramera52f6962015-03-09 15:50:58 +000032
Francis Visoiu Mistrih8b617642017-05-18 17:21:13 +000033 void getAnalysisUsage(AnalysisUsage &AU) const override {
34 AU.addRequired<TargetPassConfig>();
35 MachineFunctionPass::getAnalysisUsage(AU);
36 }
Benjamin Kramera52f6962015-03-09 15:50:58 +000037
Francis Visoiu Mistrih8b617642017-05-18 17:21:13 +000038 bool runOnMachineFunction(MachineFunction &MF) override;
Vasileios Kalintiris46fa9b72015-03-14 09:20:52 +000039 };
40
41 char MipsModuleDAGToDAGISel::ID = 0;
Alexander Kornienkof00654e2015-06-23 09:49:53 +000042}
Reed Kotler1595f362013-04-09 19:46:01 +000043
44bool MipsModuleDAGToDAGISel::runOnMachineFunction(MachineFunction &MF) {
45 DEBUG(errs() << "In MipsModuleDAGToDAGISel::runMachineFunction\n");
Francis Visoiu Mistrih8b617642017-05-18 17:21:13 +000046 auto &TPC = getAnalysis<TargetPassConfig>();
47 auto &TM = TPC.getTM<MipsTargetMachine>();
Eric Christopher4e7d1e72014-07-18 23:41:32 +000048 TM.resetSubtarget(&MF);
Reed Kotler1595f362013-04-09 19:46:01 +000049 return false;
50}
51
Francis Visoiu Mistrih8b617642017-05-18 17:21:13 +000052llvm::FunctionPass *llvm::createMipsModuleISelDagPass() {
53 return new MipsModuleDAGToDAGISel();
Reed Kotler1595f362013-04-09 19:46:01 +000054}