[PATCH] D38619: [GVN] Prevent ScalarPRE from hoisting across instructions that don't pass control flow to successors
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 8 21:31:39 PST 2017
mkazantsev added inline comments.
================
Comment at: lib/Transforms/Scalar/GVN.cpp:2210
+ if (!IsSafeToSpeculativelyExecute && FirstImplicitControlFlowInsts.count(P))
+ return false;
// We're not interested in PRE where blocks with predecessors that are
----------------
mkazantsev wrote:
> efriedma wrote:
> > Err, wait, sorry, I wasn't reading carefully enough.
> >
> > What are you trying to check for here? I can't see why it matters if "P" has an implicit control flow instruction; we insert the new instruction at the end of the predecessor, so implicit control flow isn't a problem unless the terminator is an invoke.
> You're right, I misinterpreted this part. Invoke is also not a problem because if the terminator was an invoke, then we have a critical edge, and we don't PRE across critical edges without splitting them. This check is obsolete, I'll remove it.
It also seems that it's OK to do it if we don't need to insert a new instruction, i.e. when `NumWithout == 0`.
https://reviews.llvm.org/D38619
More information about the llvm-commits
mailing list