[llvm-dev] more reassociation in IR

Sanjay Patel via llvm-dev llvm-dev at lists.llvm.org
Tue May 8 09:19:36 PDT 2018

There are at least 3 active proposals to add reassociative optimizations in
[1] D41574 <https://reviews.llvm.org/D41574>- a new pass for
[2] D46336 <https://reviews.llvm.org/D46336> - enhance -instcombine to do
more reassociation/factoring
[3] D45842 <https://reviews.llvm.org/D45842> - add to the existing
-reassociate pass to enable factoring

Here's a basic motivating example that we fail to optimize:

Currently, responsibility for reassociative transforms is split between
-reassociate and -instcombine. I don't know if that split is intentional or
just how the code evolved. Debug stats for test-suite compiled with -O3
78K "reassociations" by -instcombine.
58K "reassociated" by -reassociate

A debug stat with D45842 showed that that transform fired 1.3K times.

Keep in mind that instcombine runs 1st, runs to fixed-point, and runs 8
times in the -O2 pipeline. Reassociate runs 1 time and doesn't run to
fixed-point. Some transforms are unique to 1 pass or the other, but there
is some overlapping functionality already there.

So the questions are:
1. How do we solve these remaining reassociation optimizations?
2. Do we want to consolidate existing reassociation transforms in 1 pass or
is there value in splitting the folds across multiple passes?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180508/62b66114/attachment.html>

More information about the llvm-dev mailing list