[llvm-dev] Eliminate some two entry PHI nodes - SimplifyCFG

Ryan Taylor via llvm-dev llvm-dev at lists.llvm.org
Mon Feb 3 10:07:55 PST 2020


SimplifyCFG FoldTwoEntryPhiNode looks to simplify all 2 entry phi nodes in
a block, if it can't do them all then it won't do any and returns. There is
a lot of code that is directly in this function geared toward this
requirement. Is it possible currently to get this function (or pass) to
simply fold "some" of the phis (without having to fold them all?). I
understand that "Simplify"CFG isn't really meant for this type of thing but
there is a lot of code that is re-usable to do this with some refactoring
of this function and potentially some addition of target specifics.

For some phis, it's beneficial to keep them as the generated COPYs can be
coalesced away later in the pipe. For other phis (for example, phis with
all or potentially partial imm ops), it would be nice to opt these to
selects (cmovs). It would also be nice to have this opt prior to the rest
of SimplifyCFG as it might enable SimplifyCFG to do a better job of
simplifying by reducing the number of phis, etc...

We could fold the imm ops in the target backend but there are
complications/complexities with doing that and we'd also potentially miss
out on earlier optimizations.

Thanks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200203/c2164a02/attachment-0001.html>


More information about the llvm-dev mailing list