blob: 65fb9caa4904a5d5c4adea6ab7ef224f8142ea2f [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
35 unsigned getSegmentAperture(unsigned AddrSpace,
36 MachineRegisterInfo &MRI,
37 MachineIRBuilder &MIRBuilder) const;
38
39 bool legalizeAddrSpaceCast(MachineInstr &MI, MachineRegisterInfo &MRI,
40 MachineIRBuilder &MIRBuilder) const;
Tom Stellardca166212017-01-30 21:56:46 +000041};
42} // End llvm namespace.
43#endif