brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 4451866 Raw
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