On Mon, May 18, 2015 at 9:09 PM, Alan Modra <amo...@gmail.com> wrote: > gpc_reg_operand contains a test that dates back to the early 1990s, > when FIRST_PSEUDO_REGISTER was 76. At that point, testing > REGNO (op) >= ARG_POINTER_REGNUM allowed ap, xer/ca, cr0..cr7 and > pseudos. A later patch corrected this to remove xer. Nowadays we > have a lot more hard registers, altivec, vsx, htm, spe hi. Some of > these are definitely special registers so not appropriate for > gpc_reg_operand to match. This patch corrects the situation, to > just allow pseudos, int, fp, altivec and vsx. ap and sfp are allowed > via INT_REGNO_P. Note that I've removed cr0..cr7. I believe this is > OK along with the extzvdi_internal2 change. I checked all uses of > gpc_reg_operand and predicates derived from gpc_reg_operand. > > The patch also removes some operand predicates I discovered were > unused, and tightens the vr save/restore patterns I added some time > ago. Bootstrapped and regression tested powerpc64le-linux and > powerpc64-linux, the latter with -mcpu=power7. OK for mainline? > > * config/rs6000/predicates.md (gpc_reg_operand): Don't allow all > hard registers numbered greater or equal to ARG_POINTER_REGNUM. > (reg_or_neg_short_operand, fix_trunc_dest_operand): Delete > unused predicates. > * config/rs6000/altivec.md (save_vregs_*, restore_vregs_*): > Use altivec_register_operand. Make insn predicate TARGET_ALTIVEC. > * config/rs6000/rs6000.md (extzvdi_internal2): Use cc_reg_operand. > * config/rs6000/vsx.md (vsx_float<VSi><mode>2): Expand comment.
Okay. Thanks, David