This is the mail archive of the
mailing list for the GCC project.
Re: Handle a + ~a in reassoc
On Wed, Apr 14, 2010 at 12:36 PM, Alexander Monakov <firstname.lastname@example.org> wrote:
> On Wed, 14 Apr 2010, Richard Guenther wrote:
>> On Tue, Apr 13, 2010 at 5:19 PM, Alexander Monakov <email@example.com> wrote:
>> > Hi,
>> > This implements folding of (a + ~a) in tree-ssa-reassoc.c. ?As the testcase
>> > suggests, this should slightly clean up Fortran code after iv-opts
>> > (unfortunately, it only helps in relatively simple cases since reassoc does
>> > not touch operands with multiple uses).
>> > Bootstrapped and regtested on x86_64-linux. ?OK for trunk?
>> A better place for this kind of tree-combining is tree-ssa-forwprop.c
>> where we already do similar kinds of tricks (and are not limited to
>> single uses).
> I looked into tree-ssa-forwprop when you mentioned it on IRC and I decided
> against implementing it there, since it would fold only if b = ~a is used in
> c = a + b. ?This is enough for 2-dimensional arrays (like in the testcase),
> but doing similar folding for 3-dimensional arrays and higher requires
> examining the whole chain of additions like in reassoc.
Btw, did you check where and why we generate the ~a in the first
place? It appears in the .original dump for your testcase. I suppose
this is a folding from the pre-tree-ssa days and nowadays should
be done during/before expansion or by combine.
> Alexander Monakov