Path: blob/main/contrib/llvm-project/llvm/lib/Target/PowerPC/GISel/PPCCallLowering.h
35294 views
//===-- PPCCallLowering.h - Call lowering for GlobalISel -------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7///8/// \file9/// This file describes how to lower LLVM calls to machine code calls.10///11//===----------------------------------------------------------------------===//1213#ifndef LLVM_LIB_TARGET_POWERPC_GISEL_PPCCALLLOWERING_H14#define LLVM_LIB_TARGET_POWERPC_GISEL_PPCCALLLOWERING_H1516#include "PPCISelLowering.h"17#include "llvm/CodeGen/GlobalISel/CallLowering.h"18#include "llvm/IR/CallingConv.h"1920namespace llvm {2122class PPCTargetLowering;2324class PPCCallLowering : public CallLowering {25public:26PPCCallLowering(const PPCTargetLowering &TLI);2728bool lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val,29ArrayRef<Register> VRegs, FunctionLoweringInfo &FLI,30Register SwiftErrorVReg) const override;31bool lowerFormalArguments(MachineIRBuilder &MIRBuilder, const Function &F,32ArrayRef<ArrayRef<Register>> VRegs,33FunctionLoweringInfo &FLI) const override;34bool lowerCall(MachineIRBuilder &MIRBuilder,35CallLoweringInfo &Info) const override;36};3738class PPCIncomingValueHandler : public CallLowering::IncomingValueHandler {39public:40PPCIncomingValueHandler(MachineIRBuilder &MIRBuilder,41MachineRegisterInfo &MRI)42: CallLowering::IncomingValueHandler(MIRBuilder, MRI) {}4344uint64_t StackUsed;4546private:47void assignValueToReg(Register ValVReg, Register PhysReg,48const CCValAssign &VA) override;4950void assignValueToAddress(Register ValVReg, Register Addr, LLT MemTy,51const MachinePointerInfo &MPO,52const CCValAssign &VA) override;5354Register getStackAddress(uint64_t Size, int64_t Offset,55MachinePointerInfo &MPO,56ISD::ArgFlagsTy Flags) override;5758virtual void markPhysRegUsed(unsigned PhysReg) = 0;59};6061class FormalArgHandler : public PPCIncomingValueHandler {6263void markPhysRegUsed(unsigned PhysReg) override;6465public:66FormalArgHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI)67: PPCIncomingValueHandler(MIRBuilder, MRI) {}68};6970} // end namespace llvm7172#endif737475