------- Comment #11 from dnovillo at gcc dot gnu dot org  2006-12-14 19:29 
-------
(In reply to comment #10)
> (In reply to comment #9)
> > (In reply to comment #8)
> > > There must be.  mem-ssa is @119760.  If you can reproduce with @119760, 
> > > then
> > > let me know and I'll take a look.
> > 
> > I can reproduce it at @119761 which is the same revision for the trunk as
> > 119761 was a revision on a branch.
> > 
> OK, I'll take a look.  FX mind sending me that data about the test?  I can't
> reproduce it locally.
> 
Oh, boy.  Now I see it.  We are making different partitioning decisions because
the order of the symbols in the partitioned alias set changed.  So, sometimes
we get one SFT into a partition which just happens to cross a call-site, and if
it's added to the partition, we miss the optimization.  In this case, the SFT
associated with b.s.w is added to MPT.69.

  <L1>:;
    # MPT.69_8 = VDEF <MPT.69_7(D)> { MPT.69 }
    b.s.w = 3;
    # VUSE <SFT.54_9(D), SFT.55_10(D), SFT.56_11(D)> { SFT.54 SFT.55 SFT.56
SFT.62 }
    # SFT.62_13 = VDEF <SFT.62_12(D)>
    # MPT.69_14 = VDEF <MPT.69_8> { SFT.62 MPT.69 }
    x = bar1 (*c_1, *c_1);
    # VUSE <MPT.69_14> { MPT.69 }
    D.1993_6 = b.s.w;


But if aliases are stored in different order in the alias set (different
DECL_UID assignment), we just happen not to choose this SFT for partitioning,
leaving the IL as:

 <L1>:;
    # SFT.61_8 = VDEF <SFT.61_7(D)> { SFT.61 }
    b.s.w = 3;
    # VUSE <SFT.58_9(D), SFT.59_10(D), SFT.60_11(D), SFT.61_8> { SFT.58 SFT.59
SFT.60 SFT.61 }
    # MPT.69_13 = VDEF <MPT.69_12(D)> { MPT.69 }
    x = bar1 (*c_1, *c_1);
    # VUSE <SFT.61_8> { SFT.61 }
    D.1990_6 = b.s.w;

I will workaround this by increasing partitioning thresholds on this test, for
now, but I will leave the PR assigned to me while I figure out better
partitioning heuristics.


-- 

dnovillo at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |dnovillo at gcc dot gnu dot
                   |dot org                     |org
             Status|UNCONFIRMED                 |ASSIGNED
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2006-12-14 19:29:22
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30194

Reply via email to