diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-01-31 01:04:51 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-01-31 01:04:51 +0000 |
commit | b96129dd4856a5473c52daceaabdfd2262bd96f2 (patch) | |
tree | b126ed8fdf918cdbd483c61513f9d3090482266c /lib | |
parent | 67dad63de642cb4d94928eae5d3568268e3398bd (diff) | |
download | external_llvm-b96129dd4856a5473c52daceaabdfd2262bd96f2.zip external_llvm-b96129dd4856a5473c52daceaabdfd2262bd96f2.tar.gz external_llvm-b96129dd4856a5473c52daceaabdfd2262bd96f2.tar.bz2 |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/IR/Attributes.cpp | 31 | ||||
-rw-r--r-- | lib/IR/Verifier.cpp | 4 |
2 files changed, 20 insertions, 15 deletions
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp index 59e86f0..98c12b5 100644 --- a/lib/IR/Attributes.cpp +++ b/lib/IR/Attributes.cpp @@ -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)); } //===----------------------------------------------------------------------===// diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index babc295..5da7448 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -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. |