Recommit "[DSE] Track earliest escape, use for loads in isReadClobber."
authorFlorian Hahn <flo@fhahn.com>
Fri, 24 Sep 2021 14:41:47 +0000 (15:41 +0100)
committerFlorian Hahn <flo@fhahn.com>
Fri, 24 Sep 2021 16:13:27 +0000 (17:13 +0100)
commit6f28fb708149e9db8d077e65fcc9f87d566e824a
tree4c5d5697069ba9458f03a169727fa173cc6fec28
parente2546525902de18bb66a0c46ad3517d9f389fa47
Recommit "[DSE] Track earliest escape, use for loads in isReadClobber."

This reverts the revert commit df56fc6ebbee6c458b0473185277b7860f7e3408.

This version of the patch adjusts the location where the EarliestEscapes
cache is cleared when an instruction gets removed. The earliest escaping
instruction does not have to be a memory instruction.

It could be a ptrtoint instruction like in the added test
@earliest_escape_ptrtoint, which subsequently gets removed. We need to
invalidate the EarliestEscape entry referring to the ptrtoint when
deleting it.

This fixes the crash mentioned in
https://bugs.chromium.org/p/chromium/issues/detail?id=1252762#c6
llvm/include/llvm/Analysis/CaptureTracking.h
llvm/lib/Analysis/CaptureTracking.cpp
llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
llvm/test/Transforms/DeadStoreElimination/captures-before-load.ll