1 //===- AMDGPULegalizerInfo ---------------------------------------*- 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 10 /// AMDGPU. 11 /// \todo This should be generated by TableGen. 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINELEGALIZER_H 15 #define LLVM_LIB_TARGET_AMDGPU_AMDGPUMACHINELEGALIZER_H 16 17 #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" 18 #include "AMDGPUArgumentUsageInfo.h" 19 20 namespace llvm { 21 22 class GCNTargetMachine; 23 class LLVMContext; 24 class GCNSubtarget; 25 26 /// This class provides the information for the target register banks. 27 class AMDGPULegalizerInfo : public LegalizerInfo { 28 const GCNSubtarget &ST; 29 30 public: 31 AMDGPULegalizerInfo(const GCNSubtarget &ST, 32 const GCNTargetMachine &TM); 33 34 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI, 35 MachineIRBuilder &B, 36 GISelChangeObserver &Observer) const override; 37 38 Register getSegmentAperture(unsigned AddrSpace, 39 MachineRegisterInfo &MRI, 40 MachineIRBuilder &B) const; 41 42 bool legalizeAddrSpaceCast(MachineInstr &MI, MachineRegisterInfo &MRI, 43 MachineIRBuilder &B) const; 44 bool legalizeFrint(MachineInstr &MI, MachineRegisterInfo &MRI, 45 MachineIRBuilder &B) const; 46 bool legalizeFceil(MachineInstr &MI, MachineRegisterInfo &MRI, 47 MachineIRBuilder &B) const; 48 bool legalizeIntrinsicTrunc(MachineInstr &MI, MachineRegisterInfo &MRI, 49 MachineIRBuilder &B) const; 50 bool legalizeITOFP(MachineInstr &MI, MachineRegisterInfo &MRI, 51 MachineIRBuilder &B, bool Signed) const; 52 bool legalizeMinNumMaxNum(MachineInstr &MI, MachineRegisterInfo &MRI, 53 MachineIRBuilder &B) const; 54 bool legalizeExtractVectorElt(MachineInstr &MI, MachineRegisterInfo &MRI, 55 MachineIRBuilder &B) const; 56 bool legalizeInsertVectorElt(MachineInstr &MI, MachineRegisterInfo &MRI, 57 MachineIRBuilder &B) const; 58 bool legalizeSinCos(MachineInstr &MI, MachineRegisterInfo &MRI, 59 MachineIRBuilder &B) const; 60 61 bool legalizeGlobalValue(MachineInstr &MI, MachineRegisterInfo &MRI, 62 MachineIRBuilder &B) const; 63 bool legalizeLoad(MachineInstr &MI, MachineRegisterInfo &MRI, 64 MachineIRBuilder &B, 65 GISelChangeObserver &Observer) const; 66 67 bool legalizeFMad(MachineInstr &MI, MachineRegisterInfo &MRI, 68 MachineIRBuilder &B) const; 69 70 Register getLiveInRegister(MachineRegisterInfo &MRI, 71 Register Reg, LLT Ty) const; 72 73 bool loadInputValue(Register DstReg, MachineIRBuilder &B, 74 const ArgDescriptor *Arg) const; 75 bool legalizePreloadedArgIntrin( 76 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B, 77 AMDGPUFunctionArgInfo::PreloadedValue ArgType) const; 78 79 bool legalizeFDIVFast(MachineInstr &MI, MachineRegisterInfo &MRI, 80 MachineIRBuilder &B) const; 81 82 bool legalizeImplicitArgPtr(MachineInstr &MI, MachineRegisterInfo &MRI, 83 MachineIRBuilder &B) const; 84 bool legalizeIsAddrSpace(MachineInstr &MI, MachineRegisterInfo &MRI, 85 MachineIRBuilder &B, unsigned AddrSpace) const; 86 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI, 87 MachineIRBuilder &B) const override; 88 89 }; 90 } // End llvm namespace. 91 #endif 92