xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCVMachineFunctionInfo.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1*06c3fb27SDimitry Andric //=- RISCVMachineFunctionInfo.cpp - RISC-V machine function info --*- C++ -*-=//
23a9a9c0cSDimitry Andric //
33a9a9c0cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43a9a9c0cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
53a9a9c0cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63a9a9c0cSDimitry Andric //
73a9a9c0cSDimitry Andric //===----------------------------------------------------------------------===//
83a9a9c0cSDimitry Andric //
93a9a9c0cSDimitry Andric // This file declares RISCV-specific per-machine-function information.
103a9a9c0cSDimitry Andric //
113a9a9c0cSDimitry Andric //===----------------------------------------------------------------------===//
123a9a9c0cSDimitry Andric 
133a9a9c0cSDimitry Andric #include "RISCVMachineFunctionInfo.h"
143a9a9c0cSDimitry Andric 
153a9a9c0cSDimitry Andric using namespace llvm;
163a9a9c0cSDimitry Andric 
RISCVMachineFunctionInfo(const llvm::RISCVMachineFunctionInfo & MFI)173a9a9c0cSDimitry Andric yaml::RISCVMachineFunctionInfo::RISCVMachineFunctionInfo(
183a9a9c0cSDimitry Andric     const llvm::RISCVMachineFunctionInfo &MFI)
193a9a9c0cSDimitry Andric     : VarArgsFrameIndex(MFI.getVarArgsFrameIndex()),
203a9a9c0cSDimitry Andric       VarArgsSaveSize(MFI.getVarArgsSaveSize()) {}
213a9a9c0cSDimitry Andric 
clone(BumpPtrAllocator & Allocator,MachineFunction & DestMF,const DenseMap<MachineBasicBlock *,MachineBasicBlock * > & Src2DstMBB) const2281ad6265SDimitry Andric MachineFunctionInfo *RISCVMachineFunctionInfo::clone(
2381ad6265SDimitry Andric     BumpPtrAllocator &Allocator, MachineFunction &DestMF,
2481ad6265SDimitry Andric     const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB)
2581ad6265SDimitry Andric     const {
2681ad6265SDimitry Andric   return DestMF.cloneInfo<RISCVMachineFunctionInfo>(*this);
2781ad6265SDimitry Andric }
2881ad6265SDimitry Andric 
mappingImpl(yaml::IO & YamlIO)293a9a9c0cSDimitry Andric void yaml::RISCVMachineFunctionInfo::mappingImpl(yaml::IO &YamlIO) {
303a9a9c0cSDimitry Andric   MappingTraits<RISCVMachineFunctionInfo>::mapping(YamlIO, *this);
313a9a9c0cSDimitry Andric }
323a9a9c0cSDimitry Andric 
initializeBaseYamlFields(const yaml::RISCVMachineFunctionInfo & YamlMFI)333a9a9c0cSDimitry Andric void RISCVMachineFunctionInfo::initializeBaseYamlFields(
343a9a9c0cSDimitry Andric     const yaml::RISCVMachineFunctionInfo &YamlMFI) {
353a9a9c0cSDimitry Andric   VarArgsFrameIndex = YamlMFI.VarArgsFrameIndex;
363a9a9c0cSDimitry Andric   VarArgsSaveSize = YamlMFI.VarArgsSaveSize;
373a9a9c0cSDimitry Andric }
38bdd1243dSDimitry Andric 
addSExt32Register(Register Reg)39bdd1243dSDimitry Andric void RISCVMachineFunctionInfo::addSExt32Register(Register Reg) {
40bdd1243dSDimitry Andric   SExt32Registers.push_back(Reg);
41bdd1243dSDimitry Andric }
42bdd1243dSDimitry Andric 
isSExt32Register(Register Reg) const43bdd1243dSDimitry Andric bool RISCVMachineFunctionInfo::isSExt32Register(Register Reg) const {
44bdd1243dSDimitry Andric   return is_contained(SExt32Registers, Reg);
45bdd1243dSDimitry Andric }
46