[PATCH] D18155: Instcombine: try to avoid wasted work in ConstantFold
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 15 18:29:20 PDT 2016
reames added a comment.
In http://reviews.llvm.org/D18155#376087, @escha wrote:
> To try to be more clear, this code appears to:
> 1. Drop instructions that are dead.
> 2. If constant, fold the constant. [this step folds ConstExprs as part of its internals, because that's how ConstantFolding works]
> 3. If not constant-foldable, check to see if any ConstExpr operands are foldable [this is where we duplicate work]
> 4. Add to the initial instcombine worklist.
Why not do the following:
1. Drop instructions that are dead.
2. Check to see if any ConstExpr operands are foldable, and update the instruction
3. If constant, fold the constant. [no longer needs to consider constexprs]
4. Add to the initial instcombine worklist.
Also, steps 1-3 are repeated inside the InstCombine run loop. See InstCombiner::run. I believe the code AddReachableCodeToWorklist is merely intended to be an optimization to avoid adding trivially constant instructions to the worklist (i.e. reduce the memory consumed by the worklist).
More information about the llvm-commits