aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2013-01-31 01:04:51 +0000
committerBill Wendling <isanbard@gmail.com>2013-01-31 01:04:51 +0000
commitb96129dd4856a5473c52daceaabdfd2262bd96f2 (patch)
treeb126ed8fdf918cdbd483c61513f9d3090482266c /lib
parent67dad63de642cb4d94928eae5d3568268e3398bd (diff)
downloadexternal_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.cpp31
-rw-r--r--lib/IR/Verifier.cpp4
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.