public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* advanced value range propagation for tree-ssa
       [not found] <1205565704.14045.ezmlm@gcc.gnu.org>
@ 2008-03-15  8:33 ` zhouyi zhou
  2008-03-15 22:36   ` Jeff Law
  2008-03-16  5:32   ` Daniel Berlin
  0 siblings, 2 replies; 6+ messages in thread
From: zhouyi zhou @ 2008-03-15  8:33 UTC (permalink / raw)
  To: gcc-patches

High, 
   Currently gcc can optimize following program by threading a block:
int
fn(int s, int w) {
  int i;

  i = 2;

  if (s)
   i = 1;

  if (s)
   printf("%d\n", i);

  return 0;
}

  While it cannot handle programs of following kind:
int
fn(int s, int w) {
  int i;

  i = 2;

  if (s)
   i = 1;

  if (w)
   goto out1;

  if (s)
   printf("%d\n", i);

out1:
  return 0;
}

The advanced value range propagation:
http://wiki.freebsd.org/ZhouyiZHOU?action=AttachFile&do=get&target=avrp.patch

nicely handles the above case

      2 (if s)
    /   \
   8     3
    \     |
     \__ 4----
        / 
      5(if s)  
    /  \
   6   10

The advanced value range propagation 
1) identify the candidate basic block pairs by 
recurively matching the dom son and dom parent (in our case block 5 and block 2 are
selected)
2) identiy the threadable edge pairs:
here edge pair 8-4 and 5-6, 3-4 and 5-10 are selected
3) thread the edges (duplicate the basic blocks between)
      2
    /  \
   8    3
   |     \
   4'-    4''-
   |      |
   5'     5''
  /       |
 6        10

The patch is being compiled and bootstraped on i686-linux m-32.
and passed most of regression test by make -k check (the not passed tests
 are caused the wrong configuration of my machine like libgmp and libmpfr)

The patch is rudimentary and very dirty written currently, I will clean it in the future

Your review and reply are greatly appreciated.
Zhouyi
and libmpfr

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: advanced value range propagation for tree-ssa
  2008-03-15  8:33 ` advanced value range propagation for tree-ssa zhouyi zhou
@ 2008-03-15 22:36   ` Jeff Law
  2008-03-16  5:32   ` Daniel Berlin
  1 sibling, 0 replies; 6+ messages in thread
From: Jeff Law @ 2008-03-15 22:36 UTC (permalink / raw)
  To: zhouyi zhou; +Cc: gcc-patches

zhouyi zhou wrote:
> High, 
>    Currently gcc can optimize following program by threading a block:
> int
> fn(int s, int w) {
>   int i;
> 
>   i = 2;
> 
>   if (s)
>    i = 1;
> 
>   if (s)
>    printf("%d\n", i);
> 
>   return 0;
> }
> 
>   While it cannot handle programs of following kind:
> int
> fn(int s, int w) {
>   int i;
> 
>   i = 2;
> 
>   if (s)
>    i = 1;
> 
>   if (w)
>    goto out1;
> 
>   if (s)
>    printf("%d\n", i);
> 
> out1:
>   return 0;
> }
> 
> The advanced value range propagation:
> http://wiki.freebsd.org/ZhouyiZHOU?action=AttachFile&do=get&target=avrp.patch
> 
> nicely handles the above case
> 
>       2 (if s)
>     /   \
>    8     3
>     \     |
>      \__ 4----
>         / 
>       5(if s)  
>     /  \
>    6   10
> 
> The advanced value range propagation 
> 1) identify the candidate basic block pairs by 
> recurively matching the dom son and dom parent (in our case block 5 and block 2 are
> selected)
> 2) identiy the threadable edge pairs:
> here edge pair 8-4 and 5-6, 3-4 and 5-10 are selected
> 3) thread the edges (duplicate the basic blocks between)
>       2
>     /  \
>    8    3
>    |     \
>    4'-    4''-
>    |      |
>    5'     5''
>   /       |
>  6        10
> 
> The patch is being compiled and bootstraped on i686-linux m-32.
> and passed most of regression test by make -k check (the not passed tests
>  are caused the wrong configuration of my machine like libgmp and libmpfr)
> 
> The patch is rudimentary and very dirty written currently, I will clean it in the future
Kenny outlined an algorithm which should handle these cases rather 
easily at the GCC summit a few years back.   You might ask him for the 
slides from his opening presentation as they included the outline of the 
algorithm.

I did an implementation to compare it against the current edge threading 
code and while it didn't stack up too well, there were a few cases where 
Kenny's algorithm would find something optimizable, but the current 
threader would not.  Your example is one of those cases.

Implementation was fairly easy -- it might be easier to work from 
Kenny's algorithm than cleaning up your own.


Jeff
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: advanced value range propagation for tree-ssa
  2008-03-15  8:33 ` advanced value range propagation for tree-ssa zhouyi zhou
  2008-03-15 22:36   ` Jeff Law
@ 2008-03-16  5:32   ` Daniel Berlin
  2008-03-16  9:56     ` Zhouyi Zhou
                       ` (2 more replies)
  1 sibling, 3 replies; 6+ messages in thread
From: Daniel Berlin @ 2008-03-16  5:32 UTC (permalink / raw)
  To: zhouyi zhou; +Cc: gcc-patches

On Sat, Mar 15, 2008 at 3:57 AM, zhouyi zhou <zhouzhouyi@gmail.com> wrote:
> High,
>    Currently gcc can optimize following program by threading a block:
>  int
>  fn(int s, int w) {
>   int i;
>
>   i = 2;
>
>   if (s)
>    i = 1;
>
>   if (s)
>    printf("%d\n", i);
>
>   return 0;
>  }
>
>   While it cannot handle programs of following kind:
>  int
>  fn(int s, int w) {
>   int i;
>
>   i = 2;
>
>   if (s)
>    i = 1;
>
>   if (w)
>    goto out1;
>
>   if (s)
>    printf("%d\n", i);
>
>  out1:
>   return 0;
>  }
>
>  The advanced value range propagation:
>  http://wiki.freebsd.org/ZhouyiZHOU?action=AttachFile&do=get&target=avrp.patch
>
>  nicely handles the above case
>
>       2 (if s)
>     /   \
>    8     3
>     \     |
>      \__ 4----
>         /
>       5(if s)
>     /  \
>    6   10
>
>  The advanced value range propagation
>  1) identify the candidate basic block pairs by
>  recurively matching the dom son and dom parent (in our case block 5 and block 2 are
>  selected)
>  2) identiy the threadable edge pairs:
>  here edge pair 8-4 and 5-6, 3-4 and 5-10 are selected
>  3) thread the edges (duplicate the basic blocks between)
>       2
>     /  \
>    8    3
>    |     \
>    4'-    4''-
>    |      |
>    5'     5''
>   /       |
>   6        10
>
>  The patch is being compiled and bootstraped on i686-linux m-32.
>  and passed most of regression test by make -k check (the not passed tests
>   are caused the wrong configuration of my machine like libgmp and libmpfr)
>
>  The patch is rudimentary and very dirty written currently, I will clean it in the future
>
>  Your review and reply are greatly appreciated.
>  Zhouyi
>  and libmpfr

You didn't svn add tree-avrp.c, so it doesn't appear in the patch :)
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: advanced value range propagation for tree-ssa
  2008-03-16  5:32   ` Daniel Berlin
@ 2008-03-16  9:56     ` Zhouyi Zhou
  2008-03-16 10:37     ` Zhouyi Zhou
  2008-03-18 12:04     ` zhouyi zhou
  2 siblings, 0 replies; 6+ messages in thread
From: Zhouyi Zhou @ 2008-03-16  9:56 UTC (permalink / raw)
  To: gcc-patches; +Cc: Daniel Berlin

and thank you Daniel, I do forgot it,  the patch is updated as:
http://wiki.freebsd.org/ZhouyiZHOU?action=AttachFile&do=get&target=avrp20080316.patch
----- Original Message ----- 
From: "Daniel Berlin" <dberlin@dberlin.org>
To: "zhouyi zhou" <zhouzhouyi@gmail.com>
Cc: <gcc-patches@gcc.gnu.org>
Sent: Sunday, March 16, 2008 11:41 AM
Subject: Re: advanced value range propagation for tree-ssa
> You didn't svn add tree-avrp.c, so it doesn't appear in the patch :)


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: advanced value range propagation for tree-ssa
  2008-03-16  5:32   ` Daniel Berlin
  2008-03-16  9:56     ` Zhouyi Zhou
@ 2008-03-16 10:37     ` Zhouyi Zhou
  2008-03-18 12:04     ` zhouyi zhou
  2 siblings, 0 replies; 6+ messages in thread
From: Zhouyi Zhou @ 2008-03-16 10:37 UTC (permalink / raw)
  To: law; +Cc: gcc-patches

Nice! but who is kenny and I can't google him or the slides out :-)
(there are so many kenny hehe)


On 3/16/08, Jeff Law <law@redhat.com> wrote:
Kenny outlined an algorithm which should handle these cases rather 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: advanced value range propagation for tree-ssa
  2008-03-16  5:32   ` Daniel Berlin
  2008-03-16  9:56     ` Zhouyi Zhou
  2008-03-16 10:37     ` Zhouyi Zhou
@ 2008-03-18 12:04     ` zhouyi zhou
  2 siblings, 0 replies; 6+ messages in thread
From: zhouyi zhou @ 2008-03-18 12:04 UTC (permalink / raw)
  To: Daniel Berlin; +Cc: gcc-patches

There is some logic error in the patch, I will provide the corrected one later, sorry for the trouble :-)
On Sat, 15 Mar 2008 23:41:11 -0400
"Daniel Berlin" <dberlin@dberlin.org> wrote:


> >  http://wiki.freebsd.org/ZhouyiZHOU?action=AttachFile&do=get&target=avrp.patch

> 
> You didn't svn add tree-avrp.c, so it doesn't appear in the patch :)
> >
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-03-18 10:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1205565704.14045.ezmlm@gcc.gnu.org>
2008-03-15  8:33 ` advanced value range propagation for tree-ssa zhouyi zhou
2008-03-15 22:36   ` Jeff Law
2008-03-16  5:32   ` Daniel Berlin
2008-03-16  9:56     ` Zhouyi Zhou
2008-03-16 10:37     ` Zhouyi Zhou
2008-03-18 12:04     ` zhouyi zhou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).