1bdd1243dSDimitry Andric //===-- RISCVLegalizerInfo.h ------------------------------------*- C++ -*-===// 2bdd1243dSDimitry Andric // 3bdd1243dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4bdd1243dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5bdd1243dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6bdd1243dSDimitry Andric // 7bdd1243dSDimitry Andric //===----------------------------------------------------------------------===// 8bdd1243dSDimitry Andric /// \file 906c3fb27SDimitry Andric /// This file declares the targeting of the Machinelegalizer class for RISC-V. 10bdd1243dSDimitry Andric /// \todo This should be generated by TableGen. 11bdd1243dSDimitry Andric //===----------------------------------------------------------------------===// 12bdd1243dSDimitry Andric 13bdd1243dSDimitry Andric #ifndef LLVM_LIB_TARGET_RISCV_RISCVMACHINELEGALIZER_H 14bdd1243dSDimitry Andric #define LLVM_LIB_TARGET_RISCV_RISCVMACHINELEGALIZER_H 15bdd1243dSDimitry Andric 16bdd1243dSDimitry Andric #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" 17*0fca6ea1SDimitry Andric #include "llvm/CodeGen/Register.h" 18bdd1243dSDimitry Andric 19bdd1243dSDimitry Andric namespace llvm { 20bdd1243dSDimitry Andric 215f757f3fSDimitry Andric class GISelChangeObserver; 225f757f3fSDimitry Andric class MachineIRBuilder; 23bdd1243dSDimitry Andric class RISCVSubtarget; 24bdd1243dSDimitry Andric 25bdd1243dSDimitry Andric class RISCVLegalizerInfo : public LegalizerInfo { 265f757f3fSDimitry Andric const RISCVSubtarget &STI; 275f757f3fSDimitry Andric const unsigned XLen; 285f757f3fSDimitry Andric const LLT sXLen; 295f757f3fSDimitry Andric 30bdd1243dSDimitry Andric public: 31bdd1243dSDimitry Andric RISCVLegalizerInfo(const RISCVSubtarget &ST); 325f757f3fSDimitry Andric 331db9f3b2SDimitry Andric bool legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI, 341db9f3b2SDimitry Andric LostDebugLocObserver &LocObserver) const override; 355f757f3fSDimitry Andric 365f757f3fSDimitry Andric bool legalizeIntrinsic(LegalizerHelper &Helper, 375f757f3fSDimitry Andric MachineInstr &MI) const override; 385f757f3fSDimitry Andric 395f757f3fSDimitry Andric private: 40*0fca6ea1SDimitry Andric bool shouldBeInConstantPool(APInt APImm, bool ShouldOptForSize) const; 415f757f3fSDimitry Andric bool legalizeShlAshrLshr(MachineInstr &MI, MachineIRBuilder &MIRBuilder, 425f757f3fSDimitry Andric GISelChangeObserver &Observer) const; 435f757f3fSDimitry Andric 445f757f3fSDimitry Andric bool legalizeVAStart(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const; 45*0fca6ea1SDimitry Andric bool legalizeVScale(MachineInstr &MI, MachineIRBuilder &MIB) const; 46*0fca6ea1SDimitry Andric bool legalizeExt(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const; 47*0fca6ea1SDimitry Andric bool legalizeSplatVector(MachineInstr &MI, MachineIRBuilder &MIB) const; 48bdd1243dSDimitry Andric }; 49bdd1243dSDimitry Andric } // end namespace llvm 50bdd1243dSDimitry Andric #endif 51