blob: b5e12f47dc9237a935ed64e8dada36ee096cc9f1 [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"
18
19namespace llvm {
20
Matt Arsenaultc3fe46b2018-03-08 16:24:16 +000021class GCNTargetMachine;
Tom Stellardca166212017-01-30 21:56:46 +000022class LLVMContext;
Tom Stellard5bfbae52018-07-11 20:59:01 +000023class GCNSubtarget;
Tom Stellardca166212017-01-30 21:56:46 +000024
25/// This class provides the information for the target register banks.
26class AMDGPULegalizerInfo : public LegalizerInfo {
27public:
Tom Stellard5bfbae52018-07-11 20:59:01 +000028 AMDGPULegalizerInfo(const GCNSubtarget &ST,
Matt Arsenaultc3fe46b2018-03-08 16:24:16 +000029 const GCNTargetMachine &TM);
Matt Arsenaulta8b43392019-02-08 02:40:47 +000030
31 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
32 MachineIRBuilder &MIRBuilder,
33 GISelChangeObserver &Observer) const override;
34
Matt Arsenault1178dc32019-06-28 01:16:46 +000035 Register getSegmentAperture(unsigned AddrSpace,
Matt Arsenaulta8b43392019-02-08 02:40:47 +000036 MachineRegisterInfo &MRI,
37 MachineIRBuilder &MIRBuilder) const;
38
39 bool legalizeAddrSpaceCast(MachineInstr &MI, MachineRegisterInfo &MRI,
40 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault6aafc5e2019-05-17 12:19:57 +000041 bool legalizeFrint(MachineInstr &MI, MachineRegisterInfo &MRI,
42 MachineIRBuilder &MIRBuilder) const;
Matt Arsenaulta510b572019-05-17 12:20:05 +000043 bool legalizeFceil(MachineInstr &MI, MachineRegisterInfo &MRI,
44 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault6aebcd52019-05-17 12:20:01 +000045 bool legalizeIntrinsicTrunc(MachineInstr &MI, MachineRegisterInfo &MRI,
46 MachineIRBuilder &MIRBuilder) const;
Matt Arsenault2f292202019-05-17 23:05:18 +000047 bool legalizeITOFP(MachineInstr &MI, MachineRegisterInfo &MRI,
48 MachineIRBuilder &MIRBuilder, bool Signed) const;
Matt Arsenaulte15770a2019-07-01 18:40:23 +000049
50 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
51 MachineIRBuilder &MIRBuilder) const override;
52
Tom Stellardca166212017-01-30 21:56:46 +000053};
54} // End llvm namespace.
55#endif