Revert for now:

--- Reverse-merging r174010 into '.':
U    include/llvm/IR/Attributes.h
U    lib/IR/Verifier.cpp
U    lib/IR/Attributes.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174012 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bill Wendling 2013-01-31 01:04:51 +00:00
parent 67dad63de6
commit b96129dd48
3 changed files with 22 additions and 16 deletions

View File

@ -113,7 +113,8 @@ public:
//===--------------------------------------------------------------------===//
/// \brief Return a uniquified Attribute object.
static Attribute get(LLVMContext &Context, AttrKind Kind, Constant *Val = 0);
static Attribute get(LLVMContext &Context, AttrKind Kind);
static Attribute get(LLVMContext &Context, AttrBuilder &B);
/// \brief Return a uniquified Attribute object that has the specific
/// alignment set.

View File

@ -30,15 +30,24 @@ using namespace llvm;
// Attribute Construction Methods
//===----------------------------------------------------------------------===//
Attribute Attribute::get(LLVMContext &Context, AttrKind Kind,
Constant *Val) {
if (Kind == None) return Attribute();
Attribute Attribute::get(LLVMContext &Context, AttrKind Kind) {
AttrBuilder B;
return Attribute::get(Context, B.addAttribute(Kind));
}
Attribute Attribute::get(LLVMContext &Context, AttrBuilder &B) {
// If there are no attributes, return an empty Attribute class.
if (!B.hasAttributes())
return Attribute();
assert(std::distance(B.begin(), B.end()) == 1 &&
"The Attribute object should represent one attribute only!");
// Otherwise, build a key to look up the existing attributes.
LLVMContextImpl *pImpl = Context.pImpl;
FoldingSetNodeID ID;
ID.AddInteger(Kind);
ID.AddPointer(Val);
ConstantInt *CI = ConstantInt::get(Type::getInt64Ty(Context), B.Raw());
ID.AddPointer(CI);
void *InsertPoint;
AttributeImpl *PA = pImpl->AttrsSet.FindNodeOrInsertPos(ID, InsertPoint);
@ -46,9 +55,7 @@ Attribute Attribute::get(LLVMContext &Context, AttrKind Kind,
if (!PA) {
// If we didn't find any existing attributes of the same shape then create a
// new one and insert it.
PA = (!Val) ?
new AttributeImpl(Context, Kind) :
new AttributeImpl(Context, Kind, Val);
PA = new AttributeImpl(Context, CI);
pImpl->AttrsSet.InsertNode(PA, InsertPoint);
}
@ -57,14 +64,14 @@ Attribute Attribute::get(LLVMContext &Context, AttrKind Kind,
}
Attribute Attribute::getWithAlignment(LLVMContext &Context, uint64_t Align) {
return get(Context, Attribute::Alignment,
ConstantInt::get(Type::getInt64Ty(Context), Align));
AttrBuilder B;
return get(Context, B.addAlignmentAttr(Align));
}
Attribute Attribute::getWithStackAlignment(LLVMContext &Context,
uint64_t Align) {
return get(Context, Attribute::StackAlignment,
ConstantInt::get(Type::getInt64Ty(Context), Align));
AttrBuilder B;
return get(Context, B.addStackAlignmentAttr(Align));
}
//===----------------------------------------------------------------------===//

View File

@ -745,9 +745,7 @@ void Verifier::VerifyFunctionAttrs(FunctionType *FT,
AttrBuilder NotFn(Attrs, AttributeSet::FunctionIndex);
NotFn.removeFunctionOnlyAttrs();
Assert1(!NotFn.hasAttributes(), "Attribute '" +
AttributeSet::get(V->getContext(),
AttributeSet::FunctionIndex,
NotFn).getAsString(AttributeSet::FunctionIndex) +
Attribute::get(V->getContext(), NotFn).getAsString() +
"' do not apply to the function!", V);
// Check for mutually incompatible attributes.