On Tue, May 6, 2008 at 9:28 AM, Ramana Radhakrishnan <[EMAIL PROTECTED]> wrote:
>
> On Tue, May 6, 2008 at 8:11 AM, Richard Guenther
>  <[EMAIL PROTECTED]> wrote:
>  > On Mon, May 5, 2008 at 7:42 PM, Jim Wilson <[EMAIL PROTECTED]> wrote:
>  >  > Pranav Bhandarkar wrote:
>  >  >
>  >  > > GCC 4.3 does fine here except when the operator is "logical and" (see
>  >  > > attached. test.c uses logical and and test1.c uses plus)
>  >  > >
>  >  >
>  >  >  Logical and generates control-flow instructions, i.e. compares, 
> branches,
>  >  > and labels.  This makes optimizing it a very different problem than
>  >  > optimizing for plus.
>  >  >
>  >  >  Try compiling with -fdump-tree-all and notice that the "gimple" dump 
> file
>  >  > already contains all of the control-flow expressed in the IL, which 
> means
>  >  > optimizing this is going to be very difficult.
>  >  >
>  >  >  We could perhaps add a new high level gimple that contains the C 
> language
>  >  > && as an operator, run a CSE pass, and then later lower it to expose the
>  >  > control flow, but that will be a lot of work, and probably won't give 
> enough
>  >  > benefit to justify it.
>  >
>  >  There are a couple of things that can be done.  One thing is building a
>  >  canonical representation for && and || and their control-flow variants and
>  >  doing optimizations on them.  Another thing is to expose the actual
>  >  conditions of the COND_EXPRs to the value-numberer, which means
>  >  converting
>  >
>  >   if (a > b)
>  >
>  >  to
>  >
>  >   cond_1 = a > b;
>  >   if (cond_1)
>  >
>  >  this way (partial) redundancies can be detected and optimized.  Of course
>  >  this may pessimize code in as many cases as it improves it.
>
>  Off the top of my head but would some sort of reassoc after removing
>  such (partial) redundancies help ?
>
>  i.e. after the redundancies are removed and the VN has done its magic .
>
>   merge
>     cond1 = a> b
>    if( cond1)
>
>  into if (a > b)

We don't do this at the moment, but yes, some canonicalization usually
helps at least to keep code simple.

Richard.

Reply via email to