On Wed, Nov 28, 2012 at 08:44:18AM -0500, Hans-Peter Nilsson wrote: > On Tue, 27 Nov 2012, Jakub Jelinek wrote: > > 2012-11-26 Jakub Jelinek <ja...@redhat.com> > > > > PR debug/36728 > > PR debug/55467 > > * cselib.c (cselib_process_insn): If cselib_preserve_constants, > > don't reset table and exit early on volatile insns and setjmp. > > Reset table afterwards on setjmp. > > It seems this also fixes the s390x-linux bootstrap; at least the > test-case in PR bootstrap/55511. Thanks again. > > (N.B. there may also be a bug in var-tracking, covered up by the > patch above.)
The patch is actually a fix for that. The thing is that both cselib was doing the wrong thing for the resets (not calling cselib_preserve_only_constants () before cselib_reset_table resp. cselib_reset_table not prepared to the thing that it would need to flush all regs/mems, not just from the VALUEs that are kept in the hash table, but also from those that are dropped), and also not adding some special magic microoperation for the volatile insns (unclear what exactly it would have to do). By never handling the volatile insns specially during var-tracking all those issues are gone. Jakub