xref: /freebsd/contrib/llvm-project/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.h (revision b64c5a0ace59af62eff52bfe110a521dc73c937b)
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 /// \file
9 /// 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_H
14 #define LLVM_LIB_TARGET_RISCV_RISCVMACHINELEGALIZER_H
15 
16 #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
17 #include "llvm/CodeGen/Register.h"
18 
19 namespace llvm {
20 
21 class GISelChangeObserver;
22 class MachineIRBuilder;
23 class RISCVSubtarget;
24 
25 class RISCVLegalizerInfo : public LegalizerInfo {
26   const RISCVSubtarget &STI;
27   const unsigned XLen;
28   const LLT sXLen;
29 
30 public:
31   RISCVLegalizerInfo(const RISCVSubtarget &ST);
32 
33   bool legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI,
34                       LostDebugLocObserver &LocObserver) const override;
35 
36   bool legalizeIntrinsic(LegalizerHelper &Helper,
37                          MachineInstr &MI) const override;
38 
39 private:
40   bool shouldBeInConstantPool(APInt APImm, bool ShouldOptForSize) const;
41   bool legalizeShlAshrLshr(MachineInstr &MI, MachineIRBuilder &MIRBuilder,
42                            GISelChangeObserver &Observer) const;
43 
44   bool legalizeVAStart(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const;
45   bool legalizeVScale(MachineInstr &MI, MachineIRBuilder &MIB) const;
46   bool legalizeExt(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const;
47   bool legalizeSplatVector(MachineInstr &MI, MachineIRBuilder &MIB) const;
48 };
49 } // end namespace llvm
50 #endif
51