On 9/5/18 5:48 AM, a...@codesourcery.com wrote: > > GCN has some registers which are special purpose, but not "fixed" because we > want the register allocator to track their usage and select alternatives that > use different special registers (e.g. scalar cc vs. vector cc). > > Sometimes this leads the regrename pass to ICE. Quite how it gets confused is > not well understood, but considering such registers for renaming is surely not > useful. > > This patch creates a new macro SPECIAL_REGNO_P which disables regrename. In > other words, the register is fixed once allocated. > > 2018-09-05 Kwok Cheung Yeung <k...@codesourcery.com> > > gcc/ > * defaults.h (SPECIAL_REGNO_P): Define to false by default. > * regrename.c (check_new_reg_p): Do not rename to a special register. > (rename_chains): Do not rename special registers. This feels like you're papering over a problem in regrename and/or the GCN port.. regrename should be checking the predicate and constraints when it makes changes. And I think that you're still allowed to refer to a fixed register in alternatives.
Jeff