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.