These rely on methods I'm trying to cleanup.
return getDereferenceableOrNullBytes(ArgNo + FirstArgIndex);
}
- /// Get the allocsize argument numbers (or pair(0, 0) if unknown).
- std::pair<unsigned, Optional<unsigned>>
- getAllocSizeArgs(unsigned Index) const;
-
- /// Get the vscale_range argument numbers (or pair(0, 0) if unknown).
- std::pair<unsigned, unsigned> getVScaleRangeArgs(unsigned Index) const;
-
/// Return the attributes at the index as a string.
std::string getAsString(unsigned Index, bool InAttrGrp = false) const;
void removeParamUndefImplyingAttrs(unsigned ArgNo);
/// Return the stack alignment for the function.
- unsigned getFnStackAlignment() const {
- if (!hasFnAttribute(Attribute::StackAlignment))
- return 0;
- if (const auto MA =
- AttributeSets.getStackAlignment(AttributeList::FunctionIndex))
- return MA->value();
- return 0;
- }
-
- /// Return the stack alignment for the function.
MaybeAlign getFnStackAlign() const {
- if (!hasFnAttribute(Attribute::StackAlignment))
- return None;
return AttributeSets.getStackAlignment(AttributeList::FunctionIndex);
}
static inline unsigned getFnStackAlignment(const TargetSubtargetInfo *STI,
const Function &F) {
- if (F.hasFnAttribute(Attribute::StackAlignment))
- return F.getFnStackAlignment();
+ if (auto MA = F.getFnStackAlign())
+ return MA->value();
return STI->getFrameLowering()->getStackAlign().value();
}
return getAttributes(Index).getDereferenceableOrNullBytes();
}
-std::pair<unsigned, Optional<unsigned>>
-AttributeList::getAllocSizeArgs(unsigned Index) const {
- return getAttributes(Index).getAllocSizeArgs();
-}
-
-std::pair<unsigned, unsigned>
-AttributeList::getVScaleRangeArgs(unsigned Index) const {
- return getAttributes(Index).getVScaleRangeArgs();
-}
-
std::string AttributeList::getAsString(unsigned Index, bool InAttrGrp) const {
return getAttributes(Index).getAsString(InAttrGrp);
}
if (Attrs.hasFnAttr(Attribute::AllocSize)) {
std::pair<unsigned, Optional<unsigned>> Args =
- Attrs.getAllocSizeArgs(AttributeList::FunctionIndex);
+ Attrs.getFnAttrs().getAllocSizeArgs();
auto CheckParam = [&](StringRef Name, unsigned ParamNo) {
if (ParamNo >= FT->getNumParams()) {
if (Attrs.hasFnAttr(Attribute::VScaleRange)) {
std::pair<unsigned, unsigned> Args =
- Attrs.getVScaleRangeArgs(AttributeList::FunctionIndex);
+ Attrs.getFnAttrs().getVScaleRangeArgs();
if (Args.first > Args.second && Args.second != 0)
CheckFailed("'vscale_range' minimum cannot be greater than maximum", V);