blob: 7c566d2218f911d0a8fdce75e3286ce394922a1d [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 {
28public:
Tom Stellard5bfbae52018-07-11 20:59:01 +000029 AMDGPULegalizerInfo(const GCNSubtarget &ST,
Matt Arsenaultc3fe46b2018-03-08 16:24:16 +000030 const GCNTargetMachine &TM);
Matt Arsenaulta8b43392019-02-08 02:40:47 +000031
32 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
33 MachineIRBuilder &MIRBuilder,
34 GISelChangeObserver &Observer) const override;
35
Matt Arsenault1178dc32019-06-28 01:16:46 +000036 Register getSegmentAperture(unsigned AddrSpace,
Matt Arsenaulta8b43392019-02-08 02:40:47 +000037 MachineRegisterInfo &MRI,
38 MachineIRBuilder &MIRBuilder) const;
39
40 bool legalizeAddrSpaceCast(MachineInstr &MI, MachineRegisterInfo &MRI,
41 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault6aafc5e2019-05-17 12:19:57 +000042 bool legalizeFrint(MachineInstr &MI, MachineRegisterInfo &MRI,
43 MachineIRBuilder &MIRBuilder) const;
Matt Arsenaulta510b572019-05-17 12:20:05 +000044 bool legalizeFceil(MachineInstr &MI, MachineRegisterInfo &MRI,
45 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault6aebcd52019-05-17 12:20:01 +000046 bool legalizeIntrinsicTrunc(MachineInstr &MI, MachineRegisterInfo &MRI,
47 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault2f292202019-05-17 23:05:18 +000048 bool legalizeITOFP(MachineInstr &MI, MachineRegisterInfo &MRI,
49 MachineIRBuilder &MIRBuilder, bool Signed) const;
Matt Arsenaulte15770a2019-07-01 18:40:23 +000050
Matt Arsenaulte2c86cc2019-07-01 18:45:36 +000051 Register getLiveInRegister(MachineRegisterInfo &MRI,
52 Register Reg, LLT Ty) const;
53
54 bool loadInputValue(Register DstReg, MachineIRBuilder &B,
55 const ArgDescriptor *Arg) const;
56 bool legalizePreloadedArgIntrin(
57 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B,
58 AMDGPUFunctionArgInfo::PreloadedValue ArgType) const;
59
Matt Arsenaulte15770a2019-07-01 18:40:23 +000060 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
61 MachineIRBuilder &MIRBuilder) const override;
62
Tom Stellardca166212017-01-30 21:56:46 +000063};
64} // End llvm namespace.
65#endif