http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43491
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org --- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- As said, the fix in comment #6 isn't really effective and I intend to basically revert it. But I'd like to have guidance on what transforms people think are ok for global register vars - esp. what is "true redundancy elimination"? Any redundancy elimination can cause the extension of the lifetime of the temporaries we create and thus increase register pressure. Ideally we'd treat global register variables by rewriting them into SSA form but avoiding overlapping life ranges. At the moment we get those extra "temporaries" by means of gimple restrictions which see global register vars as memory. Note that you can reliably prevent any "disturbing" transforms of global register vars by declaring them volatile. I suppose the real issue is that GCC inserts/moves sets of the global register variable. CSE across function calls could be easily inhibited as well.