60 lines · c
1//===---- Mips16ISelDAGToDAG.h - A Dag to Dag Inst Selector for Mips ------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Subclass of MipsDAGToDAGISel specialized for mips16.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_MIPS_MIPS16ISELDAGTODAG_H14#define LLVM_LIB_TARGET_MIPS_MIPS16ISELDAGTODAG_H15 16#include "MipsISelDAGToDAG.h"17 18namespace llvm {19 20class Mips16DAGToDAGISel : public MipsDAGToDAGISel {21public:22 explicit Mips16DAGToDAGISel(MipsTargetMachine &TM, CodeGenOptLevel OL)23 : MipsDAGToDAGISel(TM, OL) {}24 25private:26 std::pair<SDNode *, SDNode *> selectMULT(SDNode *N, unsigned Opc,27 const SDLoc &DL, EVT Ty, bool HasLo,28 bool HasHi);29 30 bool runOnMachineFunction(MachineFunction &MF) override;31 32 bool selectAddr(bool SPAllowed, SDValue Addr, SDValue &Base,33 SDValue &Offset);34 bool selectAddr16(SDValue Addr, SDValue &Base,35 SDValue &Offset) override;36 bool selectAddr16SP(SDValue Addr, SDValue &Base,37 SDValue &Offset) override;38 39 bool trySelect(SDNode *Node) override;40 41 void processFunctionAfterISel(MachineFunction &MF) override;42 43 // Insert instructions to initialize the global base register in the44 // first MBB of the function.45 void initGlobalBaseReg(MachineFunction &MF);46 47 void initMips16SPAliasReg(MachineFunction &MF);48};49 50class Mips16DAGToDAGISelLegacy : public MipsDAGToDAGISelLegacy {51public:52 explicit Mips16DAGToDAGISelLegacy(MipsTargetMachine &TM, CodeGenOptLevel OL);53};54 55FunctionPass *createMips16ISelDag(MipsTargetMachine &TM,56 CodeGenOptLevel OptLevel);57}58 59#endif60