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