Load PRE is scheduled for 4.2, I'm creating this bug because load PRE is
currently split between CSE and GCSE (this bug blocks the "optimizations caught
by CSE" meta-bug, PR19721).  Given this code,

   unsigned outcnt;
   extern void flush_outbuf(void);

   void
   bi_windup(unsigned char *outbuf, unsigned char bi_buf)
   {
       outbuf[outcnt] = bi_buf;
       if (outcnt == 16384)
               flush_outbuf();
       outbuf[outcnt] = bi_buf;
   }
   
we'd want the code to become

    void
    bi_windup(unsigned char *outbuf, unsigned char bi_buf)
    {
        int t1 = outcnt;
        outbuf[t1] = bi_buf;
        int t2 = outcnt, t3;
        if (t2 == 16384) {
                flush_outbuf();
                t3 = outcnt;
        } else
                t3 = t2;
        outbuf[t3] = bi_buf;
    }

currently this optimization is split between CSE (with path following) and 
GCSE.  
Actually, GCSE is able to do it alone if the number of GCSE passes is increased.

-- 
           Summary: load PRE is missing
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: bonzini at gcc dot gnu dot org
                CC: dberlin at gcc dot gnu dot org,gcc-bugs at gcc dot gnu
                    dot org
OtherBugsDependingO 19721
             nThis:


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

Reply via email to