xref: /llvm-project/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.h (revision 4087b871c5aa80ae2f5425533eb83d909231caa7)
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