14be39288SPhilip Reames //===-- RISCVLegalizerInfo.h ------------------------------------*- C++ -*-===// 24be39288SPhilip Reames // 34be39288SPhilip Reames // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 44be39288SPhilip Reames // See https://llvm.org/LICENSE.txt for license information. 54be39288SPhilip Reames // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 64be39288SPhilip Reames // 74be39288SPhilip Reames //===----------------------------------------------------------------------===// 84be39288SPhilip Reames /// \file 929463612SCraig Topper /// This file declares the targeting of the Machinelegalizer class for RISC-V. 104be39288SPhilip Reames /// \todo This should be generated by TableGen. 114be39288SPhilip Reames //===----------------------------------------------------------------------===// 124be39288SPhilip Reames 134be39288SPhilip Reames #ifndef LLVM_LIB_TARGET_RISCV_RISCVMACHINELEGALIZER_H 144be39288SPhilip Reames #define LLVM_LIB_TARGET_RISCV_RISCVMACHINELEGALIZER_H 154be39288SPhilip Reames 16a0d8fa5dSJiahan Xie #include "llvm/CodeGen/GlobalISel/LegalizerHelper.h" 174be39288SPhilip Reames #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" 187192c22eSMikhail Gudim #include "llvm/CodeGen/Register.h" 194be39288SPhilip Reames 204be39288SPhilip Reames namespace llvm { 214be39288SPhilip Reames 22bab2cf2dSCraig Topper class GISelChangeObserver; 23bab2cf2dSCraig Topper class MachineIRBuilder; 244be39288SPhilip Reames class RISCVSubtarget; 254be39288SPhilip Reames 264be39288SPhilip Reames class RISCVLegalizerInfo : public LegalizerInfo { 277c3c8a12SMin-Yih Hsu const RISCVSubtarget &STI; 287c3c8a12SMin-Yih Hsu const unsigned XLen; 297c3c8a12SMin-Yih Hsu const LLT sXLen; 307c3c8a12SMin-Yih Hsu 314be39288SPhilip Reames public: 324be39288SPhilip Reames RISCVLegalizerInfo(const RISCVSubtarget &ST); 33479716d9SCraig Topper 34d659bd16SDavid Green bool legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI, 35d659bd16SDavid Green LostDebugLocObserver &LocObserver) const override; 36bab2cf2dSCraig Topper 373a38baa0SMichael Maitland bool legalizeIntrinsic(LegalizerHelper &Helper, 383a38baa0SMichael Maitland MachineInstr &MI) const override; 393a38baa0SMichael Maitland 40bab2cf2dSCraig Topper private: 41a9d39ce5SCraig Topper bool shouldBeInConstantPool(const APInt &APImm, bool ShouldOptForSize) const; 42bab2cf2dSCraig Topper bool legalizeShlAshrLshr(MachineInstr &MI, MachineIRBuilder &MIRBuilder, 43bab2cf2dSCraig Topper GISelChangeObserver &Observer) const; 443ccba24cSMichael Maitland 45*4087b871SCraig Topper bool legalizeBRJT(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const; 46306e13e4SCraig Topper bool legalizeVAStart(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const; 4754a9f0e4SMichael Maitland bool legalizeVScale(MachineInstr &MI, MachineIRBuilder &MIB) const; 488aa3a77eSMichael Maitland bool legalizeExt(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const; 498aa3a77eSMichael Maitland bool legalizeSplatVector(MachineInstr &MI, MachineIRBuilder &MIB) const; 50fa6c02a9SMichael Maitland bool legalizeExtractSubvector(MachineInstr &MI, MachineIRBuilder &MIB) const; 516bac4149SMichael Maitland bool legalizeInsertSubvector(MachineInstr &MI, LegalizerHelper &Helper, 526bac4149SMichael Maitland MachineIRBuilder &MIB) const; 53a0d8fa5dSJiahan Xie bool legalizeLoadStore(MachineInstr &MI, LegalizerHelper &Helper, 54a0d8fa5dSJiahan Xie MachineIRBuilder &MIB) const; 554be39288SPhilip Reames }; 564be39288SPhilip Reames } // end namespace llvm 574be39288SPhilip Reames #endif 58