blob: 251cb7a2c440d68eaf613ff2105b8cc3085756a8 [file] [log] [blame]
Tom Stellard000c5af2016-04-14 19:09:28 +00001//===- lib/Target/AMDGPU/AMDGPUCallLowering.h - Call lowering -*- C++ -*---===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9///
10/// \file
11/// This file describes how to lower LLVM calls to machine code calls.
12///
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUCALLLOWERING_H
16#define LLVM_LIB_TARGET_AMDGPU_AMDGPUCALLLOWERING_H
17
Yaxun Liu1a14bfa2017-03-27 14:04:01 +000018#include "AMDGPU.h"
Tom Stellard000c5af2016-04-14 19:09:28 +000019#include "llvm/CodeGen/GlobalISel/CallLowering.h"
20
21namespace llvm {
22
23class AMDGPUTargetLowering;
24
25class AMDGPUCallLowering: public CallLowering {
Yaxun Liu1a14bfa2017-03-27 14:04:01 +000026 AMDGPUAS AMDGPUASI;
Tom Stellardca166212017-01-30 21:56:46 +000027
28 unsigned lowerParameterPtr(MachineIRBuilder &MIRBuilder, Type *ParamTy,
29 unsigned Offset) const;
30
31 void lowerParameter(MachineIRBuilder &MIRBuilder, Type *ParamTy,
32 unsigned Offset, unsigned DstReg) const;
33
Tom Stellard000c5af2016-04-14 19:09:28 +000034 public:
35 AMDGPUCallLowering(const AMDGPUTargetLowering &TLI);
36
37 bool lowerReturn(MachineIRBuilder &MIRBuiler, const Value *Val,
38 unsigned VReg) const override;
Tim Northover862758ec2016-09-21 12:57:35 +000039 bool lowerFormalArguments(MachineIRBuilder &MIRBuilder, const Function &F,
40 ArrayRef<unsigned> VRegs) const override;
Matt Arsenault2b1f9aa2017-05-17 21:56:25 +000041 static CCAssignFn *CCAssignFnForCall(CallingConv::ID CC, bool IsVarArg);
42 static CCAssignFn *CCAssignFnForReturn(CallingConv::ID CC, bool IsVarArg);
Tom Stellard000c5af2016-04-14 19:09:28 +000043};
44} // End of namespace llvm;
45#endif