[llvm] r328748 - [MemorySSA] Consider callsite args for hashing and equality.

Friedman, Eli via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 28 19:01:01 PDT 2018


On 3/28/2018 5:54 PM, George Burgess IV via llvm-commits wrote:
> Author: gbiv
> Date: Wed Mar 28 17:54:39 2018
> New Revision: 328748
>
> URL: http://llvm.org/viewvc/llvm-project?rev=328748&view=rev
> Log:
> [MemorySSA] Consider callsite args for hashing and equality.
>
> We use a `DenseMap<MemoryLocOrCall, MemlocStackInfo>` to keep track of
> prior work when optimizing uses in MemorySSA. Because we weren't
> accounting for callsite arguments in either the hash code or equality
> tests for `MemoryLocOrCall`s, we optimized uses too aggressively in
> some rare cases.
>
> Fix by Daniel Berlin.
>
> Should fix PR36883.
>
> Added:
>      llvm/trunk/test/Analysis/MemorySSA/pr36883.ll
> Modified:
>      llvm/trunk/lib/Analysis/MemorySSA.cpp
>
> Modified: llvm/trunk/lib/Analysis/MemorySSA.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemorySSA.cpp?rev=328748&r1=328747&r2=328748&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/MemorySSA.cpp (original)
> +++ llvm/trunk/lib/Analysis/MemorySSA.cpp Wed Mar 28 17:54:39 2018
> @@ -153,9 +153,14 @@ public:
>       if (IsCall != Other.IsCall)
>         return false;
>   
> -    if (IsCall)
> -      return CS.getCalledValue() == Other.CS.getCalledValue();
> -    return Loc == Other.Loc;
> +    if (!IsCall)
> +      return Loc == Other.Loc;
> +
> +    if (CS.getCalledValue() != Other.CS.getCalledValue())
> +      return false;
> +
> +    assert(CS.arg_size() == Other.CS.arg_size());

LLVM supports varargs functions... not sure you can assert this.

-Eli

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project



More information about the llvm-commits mailing list