diff --git a/include/llvm/IR/Attributes.h b/include/llvm/IR/Attributes.h
index d5da1c0..508277c 100644
--- a/include/llvm/IR/Attributes.h
+++ b/include/llvm/IR/Attributes.h
@@ -345,7 +345,7 @@
     addRawValue(B);
   }
   AttrBuilder(const Attribute &A) : Alignment(0), StackAlignment(0) {
-    addAttributes(A);
+    addAttribute(A);
   }
   AttrBuilder(AttributeSet AS, unsigned Idx);
 
@@ -354,12 +354,12 @@
   /// \brief Add an attribute to the builder.
   AttrBuilder &addAttribute(Attribute::AttrKind Val);
 
+  /// \brief Add the Attribute object to the builder.
+  AttrBuilder &addAttribute(Attribute A);
+
   /// \brief Remove an attribute from the builder.
   AttrBuilder &removeAttribute(Attribute::AttrKind Val);
 
-  /// \brief Add the attributes to the builder.
-  AttrBuilder &addAttributes(Attribute A);
-
   /// \brief Remove the attributes from the builder.
   AttrBuilder &removeAttributes(AttributeSet A, uint64_t Index);
 
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp
index c2ea2b2..14aba08 100644
--- a/lib/IR/Attributes.cpp
+++ b/lib/IR/Attributes.cpp
@@ -437,7 +437,7 @@
 
     for (AttributeSetNode::const_iterator II = ASN->begin(),
            IE = ASN->end(); II != IE; ++II)
-      B.addAttributes(*II);
+      B.addAttribute(*II);
     return B.Raw();
   }
 
@@ -596,7 +596,7 @@
     if (Attrs.getSlotIndex(I) == Idx) {
       for (AttributeSetImpl::const_iterator II = Attrs.pImpl->begin(I),
              IE = Attrs.pImpl->end(I); II != IE; ++II)
-        B.addAttributes(*II);
+        B.addAttribute(*II);
       break;
     }
 
@@ -798,7 +798,7 @@
 
     for (AttributeSetImpl::const_iterator II = pImpl->begin(I),
            IE = pImpl->end(I); II != IE; ++II)
-      addAttributes(*II);
+      addAttribute(*II);
 
     break;
   }
@@ -816,18 +816,7 @@
   return *this;
 }
 
-AttrBuilder &AttrBuilder::removeAttribute(Attribute::AttrKind Val) {
-  Attrs.erase(Val);
-
-  if (Val == Attribute::Alignment)
-    Alignment = 0;
-  else if (Val == Attribute::StackAlignment)
-    StackAlignment = 0;
-
-  return *this;
-}
-
-AttrBuilder &AttrBuilder::addAttributes(Attribute Attr) {
+AttrBuilder &AttrBuilder::addAttribute(Attribute Attr) {
   ConstantInt *Kind = cast<ConstantInt>(Attr.getAttributeKind());
   Attribute::AttrKind KindVal = Attribute::AttrKind(Kind->getZExtValue());
   Attrs.insert(KindVal);
@@ -839,6 +828,17 @@
   return *this;
 }
 
+AttrBuilder &AttrBuilder::removeAttribute(Attribute::AttrKind Val) {
+  Attrs.erase(Val);
+
+  if (Val == Attribute::Alignment)
+    Alignment = 0;
+  else if (Val == Attribute::StackAlignment)
+    StackAlignment = 0;
+
+  return *this;
+}
+
 AttrBuilder &AttrBuilder::removeAttributes(AttributeSet A, uint64_t Index) {
   uint64_t Mask = A.Raw(Index);
 
