unsigned int bplpt;

void BPLPTH (unsigned short x)
{
  bplpt = (bplpt & 0xFFFF) | (x << 16);
}

void BPLPTL (unsigned short x)
{
  bplpt = (bplpt & 0xFFFF0000) | x;
}

Here, nothing at the tree level recognizes that these functions implement
16-bit stores into a larger object.  This is handled by the combiner, but in
its current state it fails to optimize BPLPTL as there are too many insns to
look at.

This bug should stay open until there is a tree-level solution that does not
rely on the RTL combiner.


-- 
           Summary: Tree optimizations do not recognize partial stores
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: bernds at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to