forked from OSchip/llvm-project
[RewriteStatepointsForGC] Strengthen assertions around liveness
This is related to the issues addressed in 234651. These assertions check the properties ensured by that change at the place of use. Note that a similiar property is checked in checkBasicSSA, but without the reachability constraint. Technically, the liveness would be correct to include unreachable values, but this would be problematic for actual relocation. llvm-svn: 234766
This commit is contained in:
parent
038363370f
commit
9a2e01d908
|
@ -1879,6 +1879,24 @@ static bool insertParsePoints(Function &F, DominatorTree &DT, Pass *P,
|
|||
Statepoint statepoint(info.StatepointToken);
|
||||
live.insert(live.end(), statepoint.gc_args_begin(),
|
||||
statepoint.gc_args_end());
|
||||
#ifndef NDEBUG
|
||||
// Do some basic sanity checks on our liveness results before performing
|
||||
// relocation. Relocation can and will turn mistakes in liveness results
|
||||
// into non-sensical code which is must harder to debug.
|
||||
// TODO: It would be nice to test consistency as well
|
||||
assert(DT.isReachableFromEntry(info.StatepointToken->getParent()) &&
|
||||
"statepoint must be reachable or liveness is meaningless");
|
||||
for (Value *V : statepoint.gc_args()) {
|
||||
if (!isa<Instruction>(V))
|
||||
// Non-instruction values trivial dominate all possible uses
|
||||
continue;
|
||||
auto LiveInst = cast<Instruction>(V);
|
||||
assert(DT.isReachableFromEntry(LiveInst->getParent()) &&
|
||||
"unreachable values should never be live");
|
||||
assert(DT.dominates(LiveInst, info.StatepointToken) &&
|
||||
"basic SSA liveness expectation violated by liveness analysis");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
unique_unsorted(live);
|
||||
|
||||
|
|
Loading…
Reference in New Issue