[llvm] r333601 - [NewGVN] Fix set comparison; reflow comment

George Burgess IV via llvm-commits llvm-commits at lists.llvm.org
Wed May 30 15:30:24 PDT 2018


(Not overly familiar with NewGVN, but should we also be comparing the
contents of MemoryMembers in this?)

On Wed, May 30, 2018 at 3:28 PM George Burgess IV via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: gbiv
> Date: Wed May 30 15:24:08 2018
> New Revision: 333601
>
> URL: http://llvm.org/viewvc/llvm-project?rev=333601&view=rev
> Log:
> [NewGVN] Fix set comparison; reflow comment
>
> Looks like we intended to compare this->Members with Other->Members
> here, but ended up comparing this->Members with this->Members. Oops. :)
>
> Since CongruenceClass::Members is a SmallPtrSet anyway, we can probably
> skip building std::sets if we're willing to write a bit more code.
>
> This appears to be no functional change (for sufficiently lax values of
> "no"): this equality check was only being called inside of an assert.
> So, worst case, we'll catch more bugs in the form of assertion failures.
>
> Thanks to d0k for noting this!
>
> Modified:
>     llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp?rev=333601&r1=333600&r2=333601&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp Wed May 30 15:24:08 2018
> @@ -366,9 +366,8 @@ public:
>    // True if this class has no memory members.
>    bool definesNoMemory() const { return StoreCount == 0 &&
> memory_empty(); }
>
> -  // Return true if two congruence classes are equivalent to each other.
> This
> -  // means
> -  // that every field but the ID number and the dead field are equivalent.
> +  // Return true if two congruence classes are equivalent to each other.
> This
> +  // means that every field but the ID number and the dead field are
> equivalent.
>    bool isEquivalentTo(const CongruenceClass *Other) const {
>      if (!Other)
>        return false;
> @@ -383,10 +382,12 @@ public:
>        if (!DefiningExpr || !Other->DefiningExpr ||
>            *DefiningExpr != *Other->DefiningExpr)
>          return false;
> -    // We need some ordered set
> -    std::set<Value *> AMembers(Members.begin(), Members.end());
> -    std::set<Value *> BMembers(Members.begin(), Members.end());
> -    return AMembers == BMembers;
> +
> +    if (Members.size() != Other->Members.size())
> +      return false;
> +
> +    return all_of(Members,
> +                  [&](const Value *V) { return Other->Members.count(V);
> });
>    }
>
>  private:
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180530/ef5f35b7/attachment.html>


More information about the llvm-commits mailing list