// Otherwise, build a key to look up the existing attributes.
LLVMContextImpl *pImpl = Context.pImpl;
FoldingSetNodeID ID;
- ID.AddInteger(B.getBitMask());
+ // FIXME: Don't look up ConstantInts here.
+ ID.AddPointer(ConstantInt::get(Type::getInt64Ty(Context), B.getBitMask()));
void *InsertPoint;
AttributeImpl *PA = pImpl->AttrsSet.FindNodeOrInsertPos(ID, InsertPoint);
// AttrBuilder Method Implementations
//===----------------------------------------------------------------------===//
+AttrBuilder::AttrBuilder(AttributeSet AS, unsigned Idx)
+ : Alignment(0), StackAlignment(0) {
+ AttributeSetImpl *pImpl = AS.AttrList;
+ if (!pImpl) return;
+
+ ArrayRef<AttributeWithIndex> AttrList = pImpl->getAttributes();
+ const AttributeWithIndex *AWI = 0;
+ for (unsigned I = 0, E = AttrList.size(); I != E; ++I)
+ if (AttrList[I].Index == Idx) {
+ AWI = &AttrList[I];
+ break;
+ }
+
+ assert(AWI && "Cannot find index in attribute set!");
+
+ /// FIXME: This will be modified in the future. Basically, the
+ /// AttributeWithIndex class will contain the
+
+}
+
void AttrBuilder::clear() {
Attrs.clear();
Alignment = StackAlignment = 0;
uint64_t AttributeImpl::getAttrMask(Attribute::AttrKind Val) {
switch (Val) {
- case Attribute::EndAttrKinds: break;
+ case Attribute::EndAttrKinds:
+ case Attribute::AttrKindEmptyKey:
+ case Attribute::AttrKindTombstoneKey:
+ llvm_unreachable("Synthetic enumerators which should never get here");
+
case Attribute::None: return 0;
case Attribute::ZExt: return 1 << 0;
case Attribute::SExt: return 1 << 1;