On 16/01/14 18:22, Tejas Belagod wrote: > Tejas Belagod wrote: >> Tejas Belagod wrote: >>> Hi, >>> >>> Currently, CANNOT_CHANGE_MODE_CLASS is too restrictive wrt the mode-changes >>> it >>> allows on FPREGs - it allows none at the moment. In fact, there are many >>> mode >>> changes that are safe and can be allowed. For example, in a pattern like: >>> >>> (subreg:SF (reg:V4SF v0) 0) >>> >>> it is legal to reduce this to >>> >>> (reg:SF v0) >>> >>> The attached patch helps parts of rtlanal.c make such decisions(eg. >>> simplify_subreg_regno). >>> >>> Tested on aarch64-none-elf and aarch64_be-none-elf. OK for trunk? >>> >>> Thanks, >>> Tejas Belagod >>> ARM. >>> >>> Changelog: >>> >>> 2013-11-28 Tejas Belagod <tejas.bela...@arm.com> >>> >>> gcc/ >>> * config/aarch64/aarch64-protos.h (aarch64_cannot_change_mode_class): >>> Declare. >>> * config/aarch64/aarch64.c (aarch64_cannot_change_mode_class): New. >>> * config/aarch64/aarch64.h (CANNOT_CHANGE_MODE_CLASS): Change to call >>> backend function aarch64_cannot_change_mode_class. >>> >> >> Hi, >> >> I'm testing a patch that is more general than the change presented here for >> CANNOT_CHANGE_MODE_CLASS. This patch is now defunct. > > Ideally CANNOT_CHANGE_MODE_CLASS should be undefined, but that exposed a bug > in > LRA and subregs in general. > > Until http://gcc.gnu.org/ml/gcc/2013-12/msg00086.html and > http://gcc.gnu.org/ml/gcc/2014-01/msg00087.html are resolved, we have to run > with the attached patch. It is a slightly modified version of the initial > patch. > > Tested on aarch64-none-elf and aarch64_be-none-elf. OK for trunk? > > Thanks, > Tejas. > > 2014-01-16 Tejas Belagod <tejas.bela...@arm.com> > > gcc/ > * config/aarch64/aarch64-protos.h > (aarch64_cannot_change_mode_class_ptr): Declare. > * config/aarch64/aarch64.c (aarch64_cannot_change_mode_class, > aarch64_cannot_change_mode_class_ptr): New. > * config/aarch64/aarch64.h (CANNOT_CHANGE_MODE_CLASS): Change to call > backend hook aarch64_cannot_change_mode_class. > >
OK. R.