[llvm-commits] [llvm] r165923 - in /llvm/trunk: include/llvm/Attributes.h lib/VMCore/Attributes.cpp

David Blaikie dblaikie at gmail.com
Mon Oct 15 08:13:16 PDT 2012


On Sun, Oct 14, 2012 at 11:53 PM, Bill Wendling <isanbard at gmail.com> wrote:
> Author: void
> Date: Mon Oct 15 01:53:28 2012
> New Revision: 165923
>
> URL: http://llvm.org/viewvc/llvm-project?rev=165923&view=rev
> Log:
> Use a ::get method to create the attribute from Attributes::AttrVals instead of a constructor.
>
> Modified:
>     llvm/trunk/include/llvm/Attributes.h
>     llvm/trunk/lib/VMCore/Attributes.cpp
>
> Modified: llvm/trunk/include/llvm/Attributes.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Attributes.h?rev=165923&r1=165922&r2=165923&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Attributes.h (original)
> +++ llvm/trunk/include/llvm/Attributes.h Mon Oct 15 01:53:28 2012
> @@ -89,17 +89,26 @@
>    };
>  private:
>    AttributesImpl *Attrs;
> -
> -  explicit Attributes(AttributesImpl *A);
> +  Attributes(AttributesImpl *A);

Any particular reason this became non-explicit along the way? (I
assume it just got dropped by accident)

I don't think we have a convention that says "explicit by default
unless it needs to be otherwise" but it's probably generally a good
idea.

>  public:
>    Attributes() : Attrs(0) {}
> -  explicit Attributes(LLVMContext &C, ArrayRef<AttrVal> Vals);
>    Attributes(const Attributes &A);
>    Attributes &operator=(const Attributes &A) {
>      Attrs = A.Attrs;
>      return *this;
>    }
>
> +  /// get - Return a uniquified Attributes object. This takes the uniquified
> +  /// value from the Builder and wraps it in the Attributes class.
> +  class Builder;
> +  static Attributes get(LLVMContext &Context, ArrayRef<AttrVal> Vals);
> +  static Attributes get(LLVMContext &Context, Builder &B);
> +
> +  //===--------------------------------------------------------------------===//
> +  /// Attributes::Builder - This class is used in conjunction with the
> +  /// Attributes::get method to create an Attributes object. The object itself
> +  /// is uniquified. The Builder's value, however, is not. So this can be used
> +  /// as a quick way to test for equality, presence of attributes, etc.
>    class Builder {
>      friend class Attributes;
>      uint64_t Bits;
> @@ -122,6 +131,9 @@
>      Builder &addAttribute(Attributes::AttrVal Val);
>      Builder &removeAttribute(Attributes::AttrVal Val);
>
> +    Builder &addAttributes(const Attributes &A);
> +    Builder &removeAttributes(const Attributes &A);
> +
>      /// addRawValue - Add the raw value to the internal representation. This
>      /// should be used ONLY for decoding bitcode!
>      Builder &addRawValue(uint64_t Val);
> @@ -134,9 +146,6 @@
>      /// a power of 2) into the form used internally in Attributes.
>      Builder &addStackAlignmentAttr(unsigned Align);
>
> -    Builder &addAttributes(const Attributes &A);
> -    Builder &removeAttributes(const Attributes &A);
> -
>      /// @brief Remove attributes that are used on functions only.
>      void removeFunctionOnlyAttrs() {
>        removeAttribute(Attributes::NoReturn)
> @@ -167,10 +176,6 @@
>      }
>    };
>
> -  /// get - Return a uniquified Attributes object. This takes the uniquified
> -  /// value from the Builder and wraps it in the Attributes class.
> -  static Attributes get(LLVMContext &Context, Builder &B);
> -
>    /// @brief Return true if the attribute is present.
>    bool hasAttribute(AttrVal Val) const;
>
> @@ -224,10 +229,10 @@
>        hasAttribute(Attributes::AddressSafety);
>    }
>
> -  bool operator == (const Attributes &A) const {
> +  bool operator==(const Attributes &A) const {
>      return Attrs == A.Attrs;
>    }
> -  bool operator != (const Attributes &A) const {
> +  bool operator!=(const Attributes &A) const {
>      return Attrs != A.Attrs;
>    }
>
>
> Modified: llvm/trunk/lib/VMCore/Attributes.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Attributes.cpp?rev=165923&r1=165922&r2=165923&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/Attributes.cpp (original)
> +++ llvm/trunk/lib/VMCore/Attributes.cpp Mon Oct 15 01:53:28 2012
> @@ -28,18 +28,18 @@
>  // Attributes Implementation
>  //===----------------------------------------------------------------------===//
>
> -Attributes::Attributes(LLVMContext &C, ArrayRef<AttrVal> Vals) {
> +Attributes::Attributes(AttributesImpl *A) : Attrs(A) {}
> +
> +Attributes::Attributes(const Attributes &A) : Attrs(A.Attrs) {}
> +
> +Attributes Attributes::get(LLVMContext &Context, ArrayRef<AttrVal> Vals) {
>    Attributes::Builder B;
>    for (ArrayRef<AttrVal>::iterator I = Vals.begin(), E = Vals.end();
>         I != E; ++I)
>      B.addAttribute(*I);
> -  Attrs = Attributes::get(C, B).Attrs;
> +  return Attributes::get(Context, B);
>  }
>
> -Attributes::Attributes(AttributesImpl *A) : Attrs(A) {}
> -
> -Attributes::Attributes(const Attributes &A) : Attrs(A.Attrs) {}
> -
>  Attributes Attributes::get(LLVMContext &Context, Attributes::Builder &B) {
>    // If there are no attributes, return an empty Attributes class.
>    if (B.Bits == 0)
> @@ -186,8 +186,7 @@
>  // Attributes::Builder Implementation
>  //===----------------------------------------------------------------------===//
>
> -Attributes::Builder &Attributes::Builder::
> -addAttribute(Attributes::AttrVal Val) {
> +Attributes::Builder &Attributes::Builder::addAttribute(Attributes::AttrVal Val){
>    Bits |= AttributesImpl::getAttrMask(Val);
>    return *this;
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list