CVSROOT:        /cvs
Module name:    src
Changes by:     m...@cvs.openbsd.org    2013/08/06 13:02:37

Modified files:
        gnu/usr.bin/gcc/gcc/config/vax: vax.h 
        gnu/usr.bin/gcc/gcc: flow.c 

Log message:
One major difference between gcc 2.95 and gcc 3, is that the latter comes
with an optimization pass which attemps to identify and remove dead stores.

Unfortunately, this logic assumes that a given rtl MEM reference can only
refer to register contents and values, but not further dereference memory.
This is not true of all addressing modes on vax, and this causes gcc 3 to
consider as dead stores everything which can be expressed as *offset(register)
in vax assembly. The canonical example of this is linked list insertion or
removal, with instructions such as "item->prev->next = item->next" being
wrongly optimized out, and cause double frees or other funny linking problems
later on.

Add a knob to disable the troublesome part of that optimization pass, and
only enable this knob on vax.

This gives a native vax gcc 3 compiler able to rebuild the world.

Reply via email to