1bdd1243dSDimitry Andric //===-- RISCVCallLowering.h - Call lowering ---------------------*- C++ -*-===// 2bdd1243dSDimitry Andric // 3bdd1243dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4bdd1243dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5bdd1243dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6bdd1243dSDimitry Andric // 7bdd1243dSDimitry Andric //===----------------------------------------------------------------------===// 8bdd1243dSDimitry Andric // 9bdd1243dSDimitry Andric /// \file 10bdd1243dSDimitry Andric /// This file describes how to lower LLVM calls to machine code calls. 11bdd1243dSDimitry Andric // 12bdd1243dSDimitry Andric //===----------------------------------------------------------------------===// 13bdd1243dSDimitry Andric 14bdd1243dSDimitry Andric #ifndef LLVM_LIB_TARGET_RISCV_RISCVCALLLOWERING_H 15bdd1243dSDimitry Andric #define LLVM_LIB_TARGET_RISCV_RISCVCALLLOWERING_H 16bdd1243dSDimitry Andric 17bdd1243dSDimitry Andric #include "llvm/CodeGen/CallingConvLower.h" 18bdd1243dSDimitry Andric #include "llvm/CodeGen/GlobalISel/CallLowering.h" 19bdd1243dSDimitry Andric 20bdd1243dSDimitry Andric namespace llvm { 21bdd1243dSDimitry Andric 2206c3fb27SDimitry Andric class MachineInstrBuilder; 2306c3fb27SDimitry Andric class MachineIRBuilder; 24bdd1243dSDimitry Andric class RISCVTargetLowering; 25bdd1243dSDimitry Andric 26bdd1243dSDimitry Andric class RISCVCallLowering : public CallLowering { 27bdd1243dSDimitry Andric 28bdd1243dSDimitry Andric public: 29bdd1243dSDimitry Andric RISCVCallLowering(const RISCVTargetLowering &TLI); 30bdd1243dSDimitry Andric 31bdd1243dSDimitry Andric bool lowerReturn(MachineIRBuilder &MIRBuiler, const Value *Val, 32bdd1243dSDimitry Andric ArrayRef<Register> VRegs, 33bdd1243dSDimitry Andric FunctionLoweringInfo &FLI) const override; 34bdd1243dSDimitry Andric 35bdd1243dSDimitry Andric bool lowerFormalArguments(MachineIRBuilder &MIRBuilder, const Function &F, 36bdd1243dSDimitry Andric ArrayRef<ArrayRef<Register>> VRegs, 37bdd1243dSDimitry Andric FunctionLoweringInfo &FLI) const override; 38bdd1243dSDimitry Andric 39bdd1243dSDimitry Andric bool lowerCall(MachineIRBuilder &MIRBuilder, 40bdd1243dSDimitry Andric CallLoweringInfo &Info) const override; 4106c3fb27SDimitry Andric 4206c3fb27SDimitry Andric private: 4306c3fb27SDimitry Andric bool lowerReturnVal(MachineIRBuilder &MIRBuilder, const Value *Val, 4406c3fb27SDimitry Andric ArrayRef<Register> VRegs, MachineInstrBuilder &Ret) const; 45*5f757f3fSDimitry Andric 46*5f757f3fSDimitry Andric void saveVarArgRegisters(MachineIRBuilder &MIRBuilder, 47*5f757f3fSDimitry Andric CallLowering::IncomingValueHandler &Handler, 48*5f757f3fSDimitry Andric IncomingValueAssigner &Assigner, 49*5f757f3fSDimitry Andric CCState &CCInfo) const; 50bdd1243dSDimitry Andric }; 51bdd1243dSDimitry Andric 52bdd1243dSDimitry Andric } // end namespace llvm 53bdd1243dSDimitry Andric 54bdd1243dSDimitry Andric #endif // LLVM_LIB_TARGET_RISCV_RISCVCALLLOWERING_H 55