58 lines · c
1//===-- RISCVLegalizerInfo.h ------------------------------------*- C++ -*-===//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/// \file9/// This file declares the targeting of the Machinelegalizer class for RISC-V.10/// \todo This should be generated by TableGen.11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_RISCV_RISCVMACHINELEGALIZER_H14#define LLVM_LIB_TARGET_RISCV_RISCVMACHINELEGALIZER_H15 16#include "llvm/CodeGen/GlobalISel/LegalizerHelper.h"17#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"18#include "llvm/CodeGen/Register.h"19 20namespace llvm {21 22class GISelChangeObserver;23class MachineIRBuilder;24class RISCVSubtarget;25 26class RISCVLegalizerInfo : public LegalizerInfo {27 const RISCVSubtarget &STI;28 const unsigned XLen;29 const LLT sXLen;30 31public:32 RISCVLegalizerInfo(const RISCVSubtarget &ST);33 34 bool legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI,35 LostDebugLocObserver &LocObserver) const override;36 37 bool legalizeIntrinsic(LegalizerHelper &Helper,38 MachineInstr &MI) const override;39 40private:41 bool shouldBeInConstantPool(const APInt &APImm, bool ShouldOptForSize) const;42 bool legalizeShlAshrLshr(MachineInstr &MI, MachineIRBuilder &MIRBuilder,43 GISelChangeObserver &Observer) const;44 45 bool legalizeBRJT(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const;46 bool legalizeVAStart(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const;47 bool legalizeVScale(MachineInstr &MI, MachineIRBuilder &MIB) const;48 bool legalizeExt(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const;49 bool legalizeSplatVector(MachineInstr &MI, MachineIRBuilder &MIB) const;50 bool legalizeExtractSubvector(MachineInstr &MI, MachineIRBuilder &MIB) const;51 bool legalizeInsertSubvector(MachineInstr &MI, LegalizerHelper &Helper,52 MachineIRBuilder &MIB) const;53 bool legalizeLoadStore(MachineInstr &MI, LegalizerHelper &Helper,54 MachineIRBuilder &MIB) const;55};56} // end namespace llvm57#endif58