[PATCH] D69591: Devirtualize a call on alloca without waiting for post inline cleanup and next DevirtSCCRepeatedPass iteration.
Hiroshi Yamauchi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 31 13:45:09 PDT 2019
yamauchi added a comment.
In D69591#1728018 <https://reviews.llvm.org/D69591#1728018>, @davidxl wrote:
> In this case (shown in godbot), why does PM decides to not iterate another round?
DevirtSCCRepeatedPass uses the following heuristic to decide whether to reiterate:
1. It memorizes the indirect calls in the function body before one iteration. After the iteration, check if any of those indirect calls became direct. If so, reiterate.
2. It counts the numbers of the direct calls and the indirect calls before one iteration. After the iteration, count gain. If the number of indirect calls decreased and the number of direct calls increased, reiterate.
Neither applies here because
1. The virtual call in question isn't seen as a virtual call by DevirtSCCRepeatedPass because it appears after inlining and gets devirtualized during cleanup right after. DevirtSCCRepeatedPass only looks at the code before and after the whole inlining + cleanup pipeline.
2. Also, the numbers of direct/indirect calls in this case are 2/0 before and 2/0 after. So, it doesn't kick in, either.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69591/new/
https://reviews.llvm.org/D69591
More information about the llvm-commits
mailing list