[SSAUpdater] Don't call ValueIsRAUWd upon single use replacement
authorDaniil Suchkov <suc-daniil@yandex.ru>
Tue, 21 Jan 2020 05:21:53 +0000 (12:21 +0700)
committerDaniil Suchkov <suc-daniil@yandex.ru>
Thu, 23 Jan 2020 08:53:53 +0000 (15:53 +0700)
It is incorrect to call ValueHandleBase::ValueIsRAUWd when only one use
is replaced since it simply violates semantics of the callback and leads
to bugs like PR44320.

Previously this call was used specifically to keep LICM's cache of
AliasSetTrackers up to date across passes (as PR36801 showed, even for
that purpose it didn't work properly), but since LICM doesn't have that
cache anymore, we can safely remove this incorrect call with no
repercussions.

This patch fixes https://bugs.llvm.org/show_bug.cgi?id=44320

Reviewers: asbirlea, fhahn, efriedma, reames

Reviewed-By: asbirlea
Differential Revision: https://reviews.llvm.org/D73089

llvm/lib/Transforms/Utils/SSAUpdater.cpp
llvm/test/Transforms/LCSSA/pr44320.ll

index bffdd115d940cdce5aff51d4f7b76b6ac9cbd1b7..36a17ce7619869563cf21bc18b146b476a9669d5 100644 (file)
@@ -195,11 +195,6 @@ void SSAUpdater::RewriteUse(Use &U) {
   else
     V = GetValueInMiddleOfBlock(User->getParent());
 
-  // Notify that users of the existing value that it is being replaced.
-  Value *OldVal = U.get();
-  if (OldVal != V && OldVal->hasValueHandle())
-    ValueHandleBase::ValueIsRAUWd(OldVal, V);
-
   U.set(V);
 }
 
index a211cf82cc89b536e48fb88ea7dfd3a4b3af6257..b6082ac96ed7048ff0a45b0458b9e5fb29c95658 100644 (file)
@@ -1,4 +1,3 @@
-; XFAIL: *
 ; RUN: opt -passes="verify<scalar-evolution>,lcssa,verify<scalar-evolution>" -verify-scev-strict -S -disable-output %s
 
 ; The first SCEV verification is required because it queries SCEV and populates