[SCEV] Avoid creating unnecessary SCEVs for SelectInsts.
authorFlorian Hahn <flo@fhahn.com>
Thu, 14 Jul 2022 16:23:47 +0000 (09:23 -0700)
committerFlorian Hahn <flo@fhahn.com>
Thu, 14 Jul 2022 16:23:47 +0000 (09:23 -0700)
commite7ec1746a632798b3b0fa933ad8a8f264b2ded08
tree27c343fab32903b73d94a8da9a5479e5c4417498
parentd1a5669f5e4434d1a556b189088e96a011ec0999
[SCEV] Avoid creating unnecessary SCEVs for SelectInsts.

After 675080a4533b, we always create SCEVs for all operands of a
SelectInst. This can cause notable compile-time regressions compared to
the recursive algorithm, which only evaluates the operands if the select
is in a form we can create a usable expression.

This approach adds additional logic to getOperandsToCreate to only
queue operands for selects if we will later be able to construct a
usable SCEV.

Unfortunately this introduces a bit of coupling between actual SCEV
construction for selects and getOperandsToCreate, but I am not sure if
there are better alternatives to address the regression mentioned for
675080a4533b.

This doesn't have any notable compile-time impact on CTMark.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D129731
llvm/lib/Analysis/ScalarEvolution.cpp