Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
RISCVMachineFunctionInfo.cpp
Go to the documentation of this file.
1//=- RISCVMachineFunctionInfo.cpp - RISC-V machine function info --*- 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-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares RISCV-specific per-machine-function information.
10//
11//===----------------------------------------------------------------------===//
12
13#include "RISCVMachineFunctionInfo.h"
14#include "llvm/IR/Module.h"
15
16using namespacellvm;
17
18yaml::RISCVMachineFunctionInfo::RISCVMachineFunctionInfo(
19constllvm::RISCVMachineFunctionInfo &MFI)
20 : VarArgsFrameIndex(MFI.getVarArgsFrameIndex()),
21 VarArgsSaveSize(MFI.getVarArgsSaveSize()) {}
22
23MachineFunctionInfo *RISCVMachineFunctionInfo::clone(
24BumpPtrAllocator &Allocator,MachineFunction &DestMF,
25constDenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB)
26 const{
27return DestMF.cloneInfo<RISCVMachineFunctionInfo>(*this);
28}
29
30RISCVMachineFunctionInfo::RISCVMachineFunctionInfo(constFunction &F,
31constRISCVSubtarget *STI) {
32
33// The default stack probe size is 4096 if the function has no
34// stack-probe-size attribute. This is a safe default because it is the
35// smallest possible guard page size.
36uint64_t ProbeSize = 4096;
37if (F.hasFnAttribute("stack-probe-size"))
38 ProbeSize =F.getFnAttributeAsParsedInteger("stack-probe-size");
39elseif (constauto *PS = mdconst::extract_or_null<ConstantInt>(
40F.getParent()->getModuleFlag("stack-probe-size")))
41 ProbeSize = PS->getZExtValue();
42assert(int64_t(ProbeSize) > 0 &&"Invalid stack probe size");
43
44// Round down to the stack alignment.
45uint64_t StackAlign =
46 STI->getFrameLowering()->getTransientStackAlign().value();
47 ProbeSize = std::max(StackAlign,alignDown(ProbeSize, StackAlign));
48StringRef ProbeKind;
49if (F.hasFnAttribute("probe-stack"))
50 ProbeKind =F.getFnAttribute("probe-stack").getValueAsString();
51elseif (constauto *PS = dyn_cast_or_null<MDString>(
52F.getParent()->getModuleFlag("probe-stack")))
53 ProbeKind = PS->getString();
54if (ProbeKind.size()) {
55 StackProbeSize = ProbeSize;
56 }
57}
58
59voidyaml::RISCVMachineFunctionInfo::mappingImpl(yaml::IO &YamlIO) {
60MappingTraits<RISCVMachineFunctionInfo>::mapping(YamlIO, *this);
61}
62
63voidRISCVMachineFunctionInfo::initializeBaseYamlFields(
64constyaml::RISCVMachineFunctionInfo &YamlMFI) {
65VarArgsFrameIndex = YamlMFI.VarArgsFrameIndex;
66VarArgsSaveSize = YamlMFI.VarArgsSaveSize;
67}
68
69voidRISCVMachineFunctionInfo::addSExt32Register(Register Reg) {
70 SExt32Registers.push_back(Reg);
71}
72
73boolRISCVMachineFunctionInfo::isSExt32Register(Register Reg) const{
74returnis_contained(SExt32Registers, Reg);
75}
YamlIO
IO & YamlIO
Definition:ELFYAML.cpp:1314
Module.h
Module.h This file contains the declarations for the Module class.
F
#define F(x, y, z)
Definition:MD5.cpp:55
RISCVMachineFunctionInfo.h
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
llvm::BumpPtrAllocatorImpl
Allocate memory in an ever growing pool, as if by bump-pointer.
Definition:Allocator.h:66
llvm::DenseMap
Definition:DenseMap.h:727
llvm::Function
Definition:Function.h:63
llvm::MachineFunction
Definition:MachineFunction.h:267
llvm::MachineFunction::cloneInfo
Ty * cloneInfo(const Ty &Old)
Definition:MachineFunction.h:840
llvm::RISCVMachineFunctionInfo
RISCVMachineFunctionInfo - This class is derived from MachineFunctionInfo and contains private RISCV-...
Definition:RISCVMachineFunctionInfo.h:47
llvm::RISCVMachineFunctionInfo::initializeBaseYamlFields
void initializeBaseYamlFields(const yaml::RISCVMachineFunctionInfo &YamlMFI)
Definition:RISCVMachineFunctionInfo.cpp:63
llvm::RISCVMachineFunctionInfo::isSExt32Register
bool isSExt32Register(Register Reg) const
Definition:RISCVMachineFunctionInfo.cpp:73
llvm::RISCVMachineFunctionInfo::clone
MachineFunctionInfo * clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF, const DenseMap< MachineBasicBlock *, MachineBasicBlock * > &Src2DstMBB) const override
Make a functionally equivalent copy of this MachineFunctionInfo in MF.
Definition:RISCVMachineFunctionInfo.cpp:23
llvm::RISCVMachineFunctionInfo::addSExt32Register
void addSExt32Register(Register Reg)
Definition:RISCVMachineFunctionInfo.cpp:69
llvm::RISCVSubtarget
Definition:RISCVSubtarget.h:78
llvm::RISCVSubtarget::getFrameLowering
const RISCVFrameLowering * getFrameLowering() const override
Definition:RISCVSubtarget.h:130
llvm::Register
Wrapper class representing virtual and physical registers.
Definition:Register.h:19
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition:StringRef.h:51
llvm::StringRef::size
constexpr size_t size() const
size - Get the string size.
Definition:StringRef.h:150
llvm::TargetFrameLowering::getTransientStackAlign
Align getTransientStackAlign() const
getTransientStackAlignment - This method returns the number of bytes to which the stack pointer must ...
Definition:TargetFrameLowering.h:127
uint64_t
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::alignDown
constexpr T alignDown(U Value, V Align, W Skew=0)
Returns the largest unsigned integer less than or equal to Value and is Skew mod Align.
Definition:MathExtras.h:556
llvm::is_contained
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Definition:STLExtras.h:1903
llvm::Align::value
uint64_t value() const
This is a hole in the type system and should not be abused.
Definition:Alignment.h:85
llvm::MachineFunctionInfo
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
Definition:MachineFunction.h:104
llvm::yaml::MappingTraits
Definition:ModuleSummaryIndex.h:54
llvm::yaml::RISCVMachineFunctionInfo
Definition:RISCVMachineFunctionInfo.h:26
llvm::yaml::RISCVMachineFunctionInfo::VarArgsSaveSize
int VarArgsSaveSize
Definition:RISCVMachineFunctionInfo.h:28
llvm::yaml::RISCVMachineFunctionInfo::VarArgsFrameIndex
int VarArgsFrameIndex
Definition:RISCVMachineFunctionInfo.h:27
llvm::yaml::RISCVMachineFunctionInfo::mappingImpl
void mappingImpl(yaml::IO &YamlIO) override
Definition:RISCVMachineFunctionInfo.cpp:59
llvm::yaml::RISCVMachineFunctionInfo::RISCVMachineFunctionInfo
RISCVMachineFunctionInfo()=default

Generated on Thu Jul 17 2025 15:27:51 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp