mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
Add an accessor method to get the slot's index. This will limit the use of AttributeWithIndex.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173495 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1f375e5bc7
commit
e1f95db480
@ -339,6 +339,9 @@ public:
|
||||
/// function itself).
|
||||
unsigned getNumSlots() const;
|
||||
|
||||
/// \brief Return the index for the given slot.
|
||||
unsigned getSlotIndex(unsigned Slot) const;
|
||||
|
||||
/// \brief Return the AttributeWithIndex at the specified slot. This holds a
|
||||
/// index number plus a set of attributes.
|
||||
const AttributeWithIndex &getSlot(unsigned Slot) const;
|
||||
|
@ -122,6 +122,10 @@ public:
|
||||
LLVMContext &getContext() { return Context; }
|
||||
ArrayRef<AttributeWithIndex> getAttributes() const { return AttrList; }
|
||||
unsigned getNumAttributes() const { return AttrList.size(); }
|
||||
unsigned getSlotIndex(unsigned Slot) const {
|
||||
// FIXME: This needs to use AttrNodes instead.
|
||||
return AttrList[Slot].Index;
|
||||
}
|
||||
|
||||
void Profile(FoldingSetNodeID &ID) const {
|
||||
Profile(ID, AttrList);
|
||||
|
@ -682,6 +682,12 @@ unsigned AttributeSet::getNumSlots() const {
|
||||
return AttrList ? AttrList->getNumAttributes() : 0;
|
||||
}
|
||||
|
||||
unsigned AttributeSet::getSlotIndex(unsigned Slot) const {
|
||||
assert(AttrList && Slot < AttrList->getNumAttributes() &&
|
||||
"Slot # out of range!");
|
||||
return AttrList->getSlotIndex(Slot);
|
||||
}
|
||||
|
||||
/// getSlot - Return the AttributeWithIndex at the specified slot. This
|
||||
/// holds a number plus a set of attributes.
|
||||
const AttributeWithIndex &AttributeSet::getSlot(unsigned Slot) const {
|
||||
|
@ -718,25 +718,25 @@ void Verifier::VerifyFunctionAttrs(FunctionType *FT,
|
||||
bool SawNest = false;
|
||||
|
||||
for (unsigned i = 0, e = Attrs.getNumSlots(); i != e; ++i) {
|
||||
const AttributeWithIndex &Attr = Attrs.getSlot(i);
|
||||
unsigned Index = Attrs.getSlotIndex(i);
|
||||
|
||||
Type *Ty;
|
||||
if (Attr.Index == 0)
|
||||
if (Index == 0)
|
||||
Ty = FT->getReturnType();
|
||||
else if (Attr.Index-1 < FT->getNumParams())
|
||||
Ty = FT->getParamType(Attr.Index-1);
|
||||
else if (Index-1 < FT->getNumParams())
|
||||
Ty = FT->getParamType(Index-1);
|
||||
else
|
||||
break; // VarArgs attributes, verified elsewhere.
|
||||
|
||||
VerifyParameterAttrs(Attrs, Attr.Index, Ty, Attr.Index == 0, V);
|
||||
VerifyParameterAttrs(Attrs, Index, Ty, Index == 0, V);
|
||||
|
||||
if (Attrs.hasAttribute(Attr.Index, Attribute::Nest)) {
|
||||
if (Attrs.hasAttribute(i, Attribute::Nest)) {
|
||||
Assert1(!SawNest, "More than one parameter has attribute nest!", V);
|
||||
SawNest = true;
|
||||
}
|
||||
|
||||
if (Attrs.hasAttribute(Attr.Index, Attribute::StructRet))
|
||||
Assert1(Attr.Index == 1, "Attribute sret is not on first parameter!", V);
|
||||
if (Attrs.hasAttribute(Index, Attribute::StructRet))
|
||||
Assert1(Index == 1, "Attribute sret is not on first parameter!", V);
|
||||
}
|
||||
|
||||
if (!Attrs.hasAttributes(AttributeSet::FunctionIndex))
|
||||
@ -801,12 +801,12 @@ static bool VerifyAttributeCount(const AttributeSet &Attrs, unsigned Params) {
|
||||
return true;
|
||||
|
||||
unsigned LastSlot = Attrs.getNumSlots() - 1;
|
||||
unsigned LastIndex = Attrs.getSlot(LastSlot).Index;
|
||||
unsigned LastIndex = Attrs.getSlotIndex(LastSlot);
|
||||
if (LastIndex <= Params
|
||||
|| (LastIndex == (unsigned)~0
|
||||
&& (LastSlot == 0 || Attrs.getSlot(LastSlot - 1).Index <= Params)))
|
||||
|| (LastIndex == AttributeSet::FunctionIndex
|
||||
&& (LastSlot == 0 || Attrs.getSlotIndex(LastSlot - 1) <= Params)))
|
||||
return true;
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user