[PATCH] D96106: [GVNSink][Fix] Unregister assumptions that are replaced (PR49043)

Johannes Doerfert via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 6 09:17:53 PST 2021


jdoerfert added inline comments.


================
Comment at: llvm/lib/Transforms/Scalar/GVNSink.cpp:884
     if (I != I0)
       I->replaceAllUsesWith(I0);
   foldPointlessPHINodes(BBEnd);
----------------
nikic wrote:
> jdoerfert wrote:
> > @nikic This is where one assume is replaced with another, e.g., in the attached test.
> Okay, I think now I get it. The problem is that we use a WeakTrackingVH, which means that it will follow RAUW, and we do multiple replacements to the same assume.
> 
> This makes me wonder though: Can't we just replace the WeakTrackingVH with a WeakVH? Doing RAUW on assumes is not really meaningful because the instruction has no return value. I believe it's fine to just ignore RAUW by using WeakVH, and then in this case, the old assumes would get nulled out by the eraseFromParent below.
Trying that now. Avoiding dangling references is still kinda nice but I'm OK with a minimal fix as well. Either way.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96106/new/

https://reviews.llvm.org/D96106



More information about the llvm-commits mailing list