OSDN Git Service

Require chained analyses in BasicAA and AAResults to be transitive
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Fri, 1 Jan 2021 23:05:53 +0000 (00:05 +0100)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Mon, 11 Jan 2021 10:50:07 +0000 (11:50 +0100)
commit675be651062476cd0cd4b491b35c275bb03d7b2c
tree57ee28ac8eda4e08298d73245f2fa939e4767c19
parentc5be0e0cc0e2fca19a5d130b742ae16c66f99111
Require chained analyses in BasicAA and AAResults to be transitive

This patch fixes a bug that could result in miscompiles (at least
in an OOT target). The problem could be seen by adding checks that
the DominatorTree used in BasicAliasAnalysis and ValueTracking was
valid (e.g. by adding DT->verify() call before every DT dereference
and then running all tests in test/CodeGen).

Problem was that the LegacyPassManager calculated "last user"
incorrectly for passes such as the DominatorTree when not telling
the pass manager that there was a transitive dependency between
the different analyses. And then it could happen that an incorrect
dominator tree was used when doing alias analysis (which was a pretty
serious bug as the alias analysis result could be invalid).

Fixes: https://bugs.llvm.org/show_bug.cgi?id=48709

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D94138
llvm/lib/Analysis/AliasAnalysis.cpp
llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
llvm/lib/Transforms/Scalar/GVNHoist.cpp