blob: b46e54b66c79111c7cd78126639b75b0aba6a5d2 [file] [log] [blame]
Tom Stellard000c5af2016-04-14 19:09:28 +00001//===- lib/Target/AMDGPU/AMDGPUCallLowering.h - Call lowering -*- 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 Stellard000c5af2016-04-14 19:09:28 +00006//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// This file describes how to lower LLVM calls to machine code calls.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUCALLLOWERING_H
15#define LLVM_LIB_TARGET_AMDGPU_AMDGPUCALLLOWERING_H
16
Yaxun Liu1a14bfa2017-03-27 14:04:01 +000017#include "AMDGPU.h"
Tom Stellard000c5af2016-04-14 19:09:28 +000018#include "llvm/CodeGen/GlobalISel/CallLowering.h"
19
20namespace llvm {
21
22class AMDGPUTargetLowering;
23
24class AMDGPUCallLowering: public CallLowering {
Matt Arsenaultfaeaedf2019-06-24 16:16:12 +000025 Register lowerParameterPtr(MachineIRBuilder &MIRBuilder, Type *ParamTy,
Matt Arsenault29f30372018-07-05 17:01:20 +000026 uint64_t Offset) const;
Tom Stellardca166212017-01-30 21:56:46 +000027
28 void lowerParameter(MachineIRBuilder &MIRBuilder, Type *ParamTy,
Matt Arsenault29f30372018-07-05 17:01:20 +000029 uint64_t Offset, unsigned Align,
Matt Arsenaulte3a676e2019-06-24 15:50:29 +000030 Register DstReg) const;
Tom Stellardca166212017-01-30 21:56:46 +000031
Tom Stellard000c5af2016-04-14 19:09:28 +000032 public:
33 AMDGPUCallLowering(const AMDGPUTargetLowering &TLI);
34
Alexander Ivchenko49168f62018-08-02 08:33:31 +000035 bool lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val,
Matt Arsenaulte3a676e2019-06-24 15:50:29 +000036 ArrayRef<Register> VRegs) const override;
Tim Northover862758ec2016-09-21 12:57:35 +000037 bool lowerFormalArguments(MachineIRBuilder &MIRBuilder, const Function &F,
Matt Arsenaulte3a676e2019-06-24 15:50:29 +000038 ArrayRef<Register> VRegs) const override;
Matt Arsenault2b1f9aa2017-05-17 21:56:25 +000039 static CCAssignFn *CCAssignFnForCall(CallingConv::ID CC, bool IsVarArg);
40 static CCAssignFn *CCAssignFnForReturn(CallingConv::ID CC, bool IsVarArg);
Tom Stellard000c5af2016-04-14 19:09:28 +000041};
42} // End of namespace llvm;
43#endif