blob: f49d109b8f88afb5401c35cc9651811b6015da09 [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 Arsenaultcbd17822019-08-29 20:06:48 +000058 bool legalizeSinCos(MachineInstr &MI, MachineRegisterInfo &MRI,
59 MachineIRBuilder &MIRBuilder) const;
Matt Arsenaulte15770a2019-07-01 18:40:23 +000060
Matt Arsenault64ecca92019-09-09 17:13:44 +000061 bool legalizeGlobalValue(MachineInstr &MI, MachineRegisterInfo &MRI,
62 MachineIRBuilder &MIRBuilder) const;
63
Matt Arsenaulte2c86cc2019-07-01 18:45:36 +000064 Register getLiveInRegister(MachineRegisterInfo &MRI,
65 Register Reg, LLT Ty) const;
66
67 bool loadInputValue(Register DstReg, MachineIRBuilder &B,
68 const ArgDescriptor *Arg) const;
69 bool legalizePreloadedArgIntrin(
70 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B,
71 AMDGPUFunctionArgInfo::PreloadedValue ArgType) const;
72
Austin Kerbowc99f62e2019-07-30 18:49:16 +000073 bool legalizeFDIVFast(MachineInstr &MI, MachineRegisterInfo &MRI,
74 MachineIRBuilder &B) const;
75
Matt Arsenault9e8e8c62019-07-01 18:49:01 +000076 bool legalizeImplicitArgPtr(MachineInstr &MI, MachineRegisterInfo &MRI,
77 MachineIRBuilder &B) const;
Matt Arsenaultf581d572019-09-05 02:20:39 +000078 bool legalizeIsAddrSpace(MachineInstr &MI, MachineRegisterInfo &MRI,
79 MachineIRBuilder &B, unsigned AddrSpace) const;
Matt Arsenaulte15770a2019-07-01 18:40:23 +000080 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
81 MachineIRBuilder &MIRBuilder) const override;
82
Tom Stellardca166212017-01-30 21:56:46 +000083};
84} // End llvm namespace.
85#endif