1*5f757f3fSDimitry Andric //===- llvm/lib/Target/X86/X86CallLowering.h - Call lowering ----*- C++ -*-===// 2*5f757f3fSDimitry Andric // 3*5f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*5f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5f757f3fSDimitry Andric // 7*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 8*5f757f3fSDimitry Andric // 9*5f757f3fSDimitry Andric /// \file 10*5f757f3fSDimitry Andric /// This file describes how to lower LLVM calls to machine code calls. 11*5f757f3fSDimitry Andric // 12*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 13*5f757f3fSDimitry Andric 14*5f757f3fSDimitry Andric #ifndef LLVM_LIB_TARGET_X86_X86CALLLOWERING_H 15*5f757f3fSDimitry Andric #define LLVM_LIB_TARGET_X86_X86CALLLOWERING_H 16*5f757f3fSDimitry Andric 17*5f757f3fSDimitry Andric #include "llvm/CodeGen/GlobalISel/CallLowering.h" 18*5f757f3fSDimitry Andric #include <functional> 19*5f757f3fSDimitry Andric 20*5f757f3fSDimitry Andric namespace llvm { 21*5f757f3fSDimitry Andric 22*5f757f3fSDimitry Andric template <typename T> class ArrayRef; 23*5f757f3fSDimitry Andric class X86TargetLowering; 24*5f757f3fSDimitry Andric 25*5f757f3fSDimitry Andric class X86CallLowering : public CallLowering { 26*5f757f3fSDimitry Andric public: 27*5f757f3fSDimitry Andric X86CallLowering(const X86TargetLowering &TLI); 28*5f757f3fSDimitry Andric 29*5f757f3fSDimitry Andric bool lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val, 30*5f757f3fSDimitry Andric ArrayRef<Register> VRegs, 31*5f757f3fSDimitry Andric FunctionLoweringInfo &FLI) const override; 32*5f757f3fSDimitry Andric 33*5f757f3fSDimitry Andric bool lowerFormalArguments(MachineIRBuilder &MIRBuilder, const Function &F, 34*5f757f3fSDimitry Andric ArrayRef<ArrayRef<Register>> VRegs, 35*5f757f3fSDimitry Andric FunctionLoweringInfo &FLI) const override; 36*5f757f3fSDimitry Andric 37*5f757f3fSDimitry Andric bool lowerCall(MachineIRBuilder &MIRBuilder, 38*5f757f3fSDimitry Andric CallLoweringInfo &Info) const override; 39*5f757f3fSDimitry Andric 40*5f757f3fSDimitry Andric bool canLowerReturn(MachineFunction &MF, CallingConv::ID CallConv, 41*5f757f3fSDimitry Andric SmallVectorImpl<BaseArgInfo> &Outs, 42*5f757f3fSDimitry Andric bool IsVarArg) const override; 43*5f757f3fSDimitry Andric }; 44*5f757f3fSDimitry Andric 45*5f757f3fSDimitry Andric } // end namespace llvm 46*5f757f3fSDimitry Andric 47*5f757f3fSDimitry Andric #endif // LLVM_LIB_TARGET_X86_X86CALLLOWERING_H 48