forked from OSchip/llvm-project
[RISCV] Split RISCVISelDAGToDAG.cpp to RISCVISelDAGToDAG.h and RISCVISelDAGToDAG.cpp
For the downstream RISCV maintenance, it would be easier to inherent RISCVISelDAGToDAG by including header and only override the method that needs to be customized for the provider non-standard ISA extension without touching RISCVISelDAGToDAG.cpp which may cause conflict when upgrading the downstream LLVM version. Differential Revision: https://reviews.llvm.org/D77117
This commit is contained in:
parent
8eb40e41f6
commit
af0cd9073c
|
@ -10,55 +10,18 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "RISCVISelDAGToDAG.h"
|
||||
#include "MCTargetDesc/RISCVMCTargetDesc.h"
|
||||
#include "RISCV.h"
|
||||
#include "RISCVTargetMachine.h"
|
||||
#include "Utils/RISCVMatInt.h"
|
||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||
#include "llvm/CodeGen/SelectionDAGISel.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
#define DEBUG_TYPE "riscv-isel"
|
||||
|
||||
// RISCV-specific code to select RISCV machine instructions for
|
||||
// SelectionDAG operations.
|
||||
namespace {
|
||||
class RISCVDAGToDAGISel final : public SelectionDAGISel {
|
||||
const RISCVSubtarget *Subtarget = nullptr;
|
||||
|
||||
public:
|
||||
explicit RISCVDAGToDAGISel(RISCVTargetMachine &TargetMachine)
|
||||
: SelectionDAGISel(TargetMachine) {}
|
||||
|
||||
StringRef getPassName() const override {
|
||||
return "RISCV DAG->DAG Pattern Instruction Selection";
|
||||
}
|
||||
|
||||
bool runOnMachineFunction(MachineFunction &MF) override {
|
||||
Subtarget = &MF.getSubtarget<RISCVSubtarget>();
|
||||
return SelectionDAGISel::runOnMachineFunction(MF);
|
||||
}
|
||||
|
||||
void PostprocessISelDAG() override;
|
||||
|
||||
void Select(SDNode *Node) override;
|
||||
|
||||
bool SelectInlineAsmMemoryOperand(const SDValue &Op, unsigned ConstraintID,
|
||||
std::vector<SDValue> &OutOps) override;
|
||||
|
||||
bool SelectAddrFI(SDValue Addr, SDValue &Base);
|
||||
|
||||
// Include the pieces autogenerated from the target description.
|
||||
#include "RISCVGenDAGISel.inc"
|
||||
|
||||
private:
|
||||
void doPeepholeLoadStoreADDI();
|
||||
};
|
||||
}
|
||||
|
||||
void RISCVDAGToDAGISel::PostprocessISelDAG() {
|
||||
doPeepholeLoadStoreADDI();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
//===---- RISCVISelDAGToDAG.h - A dag to dag inst selector for RISCV ------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file defines an instruction selector for the RISCV target.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_LIB_TARGET_RISCV_RISCVISELDAGTODAG_H
|
||||
#define LLVM_LIB_TARGET_RISCV_RISCVISELDAGTODAG_H
|
||||
|
||||
#include "RISCV.h"
|
||||
#include "RISCVTargetMachine.h"
|
||||
#include "llvm/CodeGen/SelectionDAGISel.h"
|
||||
|
||||
// RISCV-specific code to select RISCV machine instructions for
|
||||
// SelectionDAG operations.
|
||||
namespace llvm {
|
||||
class RISCVDAGToDAGISel : public SelectionDAGISel {
|
||||
const RISCVSubtarget *Subtarget = nullptr;
|
||||
|
||||
public:
|
||||
explicit RISCVDAGToDAGISel(RISCVTargetMachine &TargetMachine)
|
||||
: SelectionDAGISel(TargetMachine) {}
|
||||
|
||||
StringRef getPassName() const override {
|
||||
return "RISCV DAG->DAG Pattern Instruction Selection";
|
||||
}
|
||||
|
||||
bool runOnMachineFunction(MachineFunction &MF) override {
|
||||
Subtarget = &MF.getSubtarget<RISCVSubtarget>();
|
||||
return SelectionDAGISel::runOnMachineFunction(MF);
|
||||
}
|
||||
|
||||
void PostprocessISelDAG() override;
|
||||
|
||||
void Select(SDNode *Node) override;
|
||||
|
||||
bool SelectInlineAsmMemoryOperand(const SDValue &Op, unsigned ConstraintID,
|
||||
std::vector<SDValue> &OutOps) override;
|
||||
|
||||
bool SelectAddrFI(SDValue Addr, SDValue &Base);
|
||||
|
||||
// Include the pieces autogenerated from the target description.
|
||||
#include "RISCVGenDAGISel.inc"
|
||||
|
||||
private:
|
||||
void doPeepholeLoadStoreADDI();
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue