brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 53696df Raw
69 lines · c
1//===-- M68kCallLowering.h - Call lowering ----------------------*- C++ -*-===//2//3// 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-exception6//7//===----------------------------------------------------------------------===//8//9/// \file10/// This file implements the lowering of LLVM calls to machine code calls for11/// GlobalISel.12//13//===----------------------------------------------------------------------===//14 15#ifndef LLVM_LIB_TARGET_M68K_GLSEL_M68KCALLLOWERING_H16#define LLVM_LIB_TARGET_M68K_GLSEL_M68KCALLLOWERING_H17 18#include "llvm/CodeGen/CallingConvLower.h"19#include "llvm/CodeGen/GlobalISel/CallLowering.h"20#include "llvm/CodeGen/ValueTypes.h"21 22namespace llvm {23 24class M68kTargetLowering;25class MachineInstrBuilder;26 27class M68kCallLowering : public CallLowering {28  // TODO: We are only supporting return instruction with no value at this time29  // point30 31public:32  M68kCallLowering(const M68kTargetLowering &TLI);33 34  bool lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val,35                   ArrayRef<Register> VRegs, FunctionLoweringInfo &FLI,36                   Register SwiftErrorVReg) const override;37 38  bool lowerFormalArguments(MachineIRBuilder &MIRBuilder, const Function &F,39                            ArrayRef<ArrayRef<Register>> VRegs,40                            FunctionLoweringInfo &FLI) const override;41 42  bool lowerCall(MachineIRBuilder &MIRBuilder,43                 CallLoweringInfo &Info) const override;44 45  bool enableBigEndian() const override;46};47struct M68kIncomingValueHandler : public CallLowering::IncomingValueHandler {48  M68kIncomingValueHandler(MachineIRBuilder &MIRBuilder,49                           MachineRegisterInfo &MRI)50      : CallLowering::IncomingValueHandler(MIRBuilder, MRI) {}51 52  uint64_t StackUsed;53 54private:55  void assignValueToReg(Register ValVReg, Register PhysReg,56                        const CCValAssign &VA) override;57 58  void assignValueToAddress(Register ValVReg, Register Addr, LLT MemTy,59                            const MachinePointerInfo &MPO,60                            const CCValAssign &VA) override;61 62  Register getStackAddress(uint64_t Size, int64_t Offset,63                           MachinePointerInfo &MPO,64                           ISD::ArgFlagsTy Flags) override;65};66} // end namespace llvm67 68#endif // LLVM_LIB_TARGET_M68K_GLSEL_M68KCALLLOWERING_H69