[llvm-dev] more reassociation in IR

Hiroshi Yamauchi via llvm-dev llvm-dev at lists.llvm.org
Tue May 8 10:38:59 PDT 2018


(
​I came across this issue in the context of
 D46336 <https://reviews.llvm.org/D46336>.
​ ​
Thanks, Sanjay, for starting this discussion.)

If
​we will
 move
​reassociation,
or keep additional ones
​,​
out of instcombine,
​open questions for me would be
​​:


1. Since -reassociate isn't a fixed point pass, we might need to repeat
"-instcombine -reassociate" multiple times to
​fold
 down to what we want (relating to my comment here
<https://reviews.llvm.org/D46336#1087082>). I assumed this isn't not what
we want to do
​? My impression is we don't do a fixed-point with passes?


2.
​Since -reassociate needs to come up with one operand order (at least
currently as the only reassociate pass), would there exist a single, unique
operand order that would enable all reassociative/commutative foldings that
we want? If not, could there be conflicts among different reassociation
orders depending on what folding we want?



On Tue, May 8, 2018 at 9:19 AM Sanjay Patel <spatel at rotateright.com> wrote:

> There are at least 3 active proposals to add reassociative optimizations
> in IR:
> [1] D41574 <https://reviews.llvm.org/D41574>- a new pass for
> reassociation/factoring
> [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:
> https://godbolt.org/g/64NmJM
> https://rise4fun.com/Alive/wec
>
> 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
> show:
> 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/c4948961/attachment.html>


More information about the llvm-dev mailing list