diff --git a/include/llvm/IR/Attributes.h b/include/llvm/IR/Attributes.h
index 83588fd..e854da7 100644
--- a/include/llvm/IR/Attributes.h
+++ b/include/llvm/IR/Attributes.h
@@ -107,9 +107,6 @@
   Attribute(AttributeImpl *A) : pImpl(A) {}
 
   static Attribute get(LLVMContext &Context, AttrBuilder &B);
-
-  /// \brief Return true if the attribute is present.
-  bool hasAttribute(AttrKind Val) const;
 public:
   Attribute() : pImpl(0) {}
 
@@ -129,6 +126,12 @@
   // Attribute Accessors
   //===--------------------------------------------------------------------===//
 
+  /// \brief Return true if the attribute is present.
+  bool hasAttribute(AttrKind Val) const;
+
+  /// \brief Return true if attributes exist
+  bool hasAttributes() const;
+
   /// \brief Return the kind of this attribute.
   Constant *getAttributeKind() const;
 
diff --git a/lib/IR/AttributeImpl.h b/lib/IR/AttributeImpl.h
index af9d4fa..7be5a16 100644
--- a/lib/IR/AttributeImpl.h
+++ b/lib/IR/AttributeImpl.h
@@ -46,6 +46,7 @@
   AttributeImpl(LLVMContext &C, StringRef data);
 
   bool hasAttribute(Attribute::AttrKind A) const;
+  bool hasAttributes() const;
 
   Constant *getAttributeKind() const { return Kind; }
   ArrayRef<Constant*> getAttributeValues() const { return Vals; }
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp
index 2c84a3d..98c12b5 100644
--- a/lib/IR/Attributes.cpp
+++ b/lib/IR/Attributes.cpp
@@ -82,6 +82,10 @@
   return pImpl && pImpl->hasAttribute(Val);
 }
 
+bool Attribute::hasAttributes() const {
+  return pImpl && pImpl->hasAttributes();
+}
+
 Constant *Attribute::getAttributeKind() const {
   return pImpl ? pImpl->getAttributeKind() : 0;
 }
@@ -181,7 +185,7 @@
 }
 
 bool Attribute::operator==(AttrKind K) const {
-  return (pImpl && *pImpl == K) || (!pImpl && K == None);
+  return pImpl && *pImpl == K;
 }
 bool Attribute::operator!=(AttrKind K) const {
   return !(*this == K);
@@ -222,6 +226,10 @@
   return (Raw() & getAttrMask(A)) != 0;
 }
 
+bool AttributeImpl::hasAttributes() const {
+  return Raw() != 0;
+}
+
 uint64_t AttributeImpl::getAlignment() const {
   uint64_t Mask = Raw() & getAttrMask(Attribute::Alignment);
   return 1ULL << ((Mask >> 16) - 1);
@@ -361,7 +369,7 @@
 bool AttributeSetNode::hasAttribute(Attribute::AttrKind Kind) const {
   for (SmallVectorImpl<Attribute>::const_iterator I = AttrList.begin(),
          E = AttrList.end(); I != E; ++I)
-    if (*I == Kind)
+    if (I->hasAttribute(Kind))
       return true;
   return false;
 }
@@ -369,7 +377,7 @@
 unsigned AttributeSetNode::getAlignment() const {
   for (SmallVectorImpl<Attribute>::const_iterator I = AttrList.begin(),
          E = AttrList.end(); I != E; ++I)
-    if (*I == Attribute::Alignment)
+    if (I->hasAttribute(Attribute::Alignment))
       return I->getAlignment();
   return 0;
 }
@@ -377,7 +385,7 @@
 unsigned AttributeSetNode::getStackAlignment() const {
   for (SmallVectorImpl<Attribute>::const_iterator I = AttrList.begin(),
          E = AttrList.end(); I != E; ++I)
-    if (*I == Attribute::StackAlignment)
+    if (I->hasAttribute(Attribute::StackAlignment))
       return I->getStackAlignment();
   return 0;
 }
@@ -446,7 +454,7 @@
   for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
     assert((!i || Attrs[i-1].first <= Attrs[i].first) &&
            "Misordered Attributes list!");
-    assert(Attrs[i].second != Attribute::None &&
+    assert(Attrs[i].second.hasAttributes() &&
            "Pointless attribute!");
   }
 #endif
@@ -674,7 +682,7 @@
   for (unsigned I = 0, E = pImpl->getNumAttributes(); I != E; ++I)
     for (AttributeSetImpl::const_iterator II = pImpl->begin(I),
            IE = pImpl->end(I); II != IE; ++II)
-      if (*II == Attr)
+      if (II->hasAttribute(Attr))
         return true;
 
   return false;
