blob: 3f1cc1d265dd799a96dbeeafa82278daa8ce7b0a [file] [log] [blame]
Tom Stellardca166212017-01-30 21:56:46 +00001//===- AMDGPULegalizerInfo ---------------------------------------*- C++ -*-==//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Tom Stellardca166212017-01-30 21:56:46 +00006//
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"
Matt Arsenaulte2c86cc2019-07-01 18:45:36 +000018#include "AMDGPUArgumentUsageInfo.h"
Tom Stellardca166212017-01-30 21:56:46 +000019
20namespace llvm {
21
Matt Arsenaultc3fe46b2018-03-08 16:24:16 +000022class GCNTargetMachine;
Tom Stellardca166212017-01-30 21:56:46 +000023class LLVMContext;
Tom Stellard5bfbae52018-07-11 20:59:01 +000024class GCNSubtarget;
Tom Stellardca166212017-01-30 21:56:46 +000025
26/// This class provides the information for the target register banks.
27class AMDGPULegalizerInfo : public LegalizerInfo {
Matt Arsenault9e8e8c62019-07-01 18:49:01 +000028 const GCNSubtarget &ST;
29
Tom Stellardca166212017-01-30 21:56:46 +000030public:
Tom Stellard5bfbae52018-07-11 20:59:01 +000031 AMDGPULegalizerInfo(const GCNSubtarget &ST,
Matt Arsenaultc3fe46b2018-03-08 16:24:16 +000032 const GCNTargetMachine &TM);
Matt Arsenaulta8b43392019-02-08 02:40:47 +000033
34 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
35 MachineIRBuilder &MIRBuilder,
36 GISelChangeObserver &Observer) const override;
37
Matt Arsenault1178dc32019-06-28 01:16:46 +000038 Register getSegmentAperture(unsigned AddrSpace,
Matt Arsenaulta8b43392019-02-08 02:40:47 +000039 MachineRegisterInfo &MRI,
40 MachineIRBuilder &MIRBuilder) const;
41
42 bool legalizeAddrSpaceCast(MachineInstr &MI, MachineRegisterInfo &MRI,
43 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault6aafc5e2019-05-17 12:19:57 +000044 bool legalizeFrint(MachineInstr &MI, MachineRegisterInfo &MRI,
45 MachineIRBuilder &MIRBuilder) const;
Matt Arsenaulta510b572019-05-17 12:20:05 +000046 bool legalizeFceil(MachineInstr &MI, MachineRegisterInfo &MRI,
47 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault6aebcd52019-05-17 12:20:01 +000048 bool legalizeIntrinsicTrunc(MachineInstr &MI, MachineRegisterInfo &MRI,
49 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault2f292202019-05-17 23:05:18 +000050 bool legalizeITOFP(MachineInstr &MI, MachineRegisterInfo &MRI,
51 MachineIRBuilder &MIRBuilder, bool Signed) const;
Matt Arsenault6ce1b4f2019-07-10 16:31:19 +000052 bool legalizeMinNumMaxNum(MachineInstr &MI, MachineRegisterInfo &MRI,
53 MachineIRBuilder &MIRBuilder) const;
Matt Arsenaultb0e04c02019-07-15 19:40:59 +000054 bool legalizeExtractVectorElt(MachineInstr &MI, MachineRegisterInfo &MRI,
55 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault6ed315f2019-07-15 19:43:04 +000056 bool legalizeInsertVectorElt(MachineInstr &MI, MachineRegisterInfo &MRI,
57 MachineIRBuilder &MIRBuilder) const;
Matt Arsenaulte15770a2019-07-01 18:40:23 +000058
Matt Arsenaulte2c86cc2019-07-01 18:45:36 +000059 Register getLiveInRegister(MachineRegisterInfo &MRI,
60 Register Reg, LLT Ty) const;
61
62 bool loadInputValue(Register DstReg, MachineIRBuilder &B,
63 const ArgDescriptor *Arg) const;
64 bool legalizePreloadedArgIntrin(
65 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B,
66 AMDGPUFunctionArgInfo::PreloadedValue ArgType) const;
67
Matt Arsenault9e8e8c62019-07-01 18:49:01 +000068 bool legalizeImplicitArgPtr(MachineInstr &MI, MachineRegisterInfo &MRI,
69 MachineIRBuilder &B) const;
Matt Arsenaulte15770a2019-07-01 18:40:23 +000070 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
71 MachineIRBuilder &MIRBuilder) const override;
72
Tom Stellardca166212017-01-30 21:56:46 +000073};
74} // End llvm namespace.
75#endif