reg-stack fix

Jan Hubicka jh@suse.cz
Thu Aug 3 07:13:00 GMT 2000


Hi
The reg-stack is creating improper insns like:
(plus:DF (float_extend:DF (reg:DF))
	 (reg:SF))
by swapping the registers.  This patch fixes this by swapping the regnos only.
This isn't particulary clean, since it makes since register to be accessed
as SF and then DF, but resulting insn chain is correct and similar cases
happends after eliminating of SUBREGs too, so I don't think someone
post-reload should complain about it.

Honza

Thu Aug  3 16:10:37 MET DST 2000  Jan Hubicka  <jh@suse.cz>
	* reg-stack.c (subst_stack_regs_pat):  Use replace_reg to swap
	operands.
*** reg-stack.c.old	Mon Jul 10 15:51:42 2000
--- reg-stack.c	Thu Aug  3 10:51:06 2000
*************** subst_stack_regs_pat (insn, regstack, pa
*** 1638,1646 ****
  		&& REG_P (*src1) && REG_P (*src2)
  		&& REGNO (*src1) != REGNO (*dest))
  	     {
! 		rtx tmp = *src1;
! 		*src1 = *src2;
! 		*src2 = tmp;
  	     }
  	    break;
  
--- 1638,1646 ----
  		&& REG_P (*src1) && REG_P (*src2)
  		&& REGNO (*src1) != REGNO (*dest))
  	     {
! 		int tmp = REGNO (*src1);
! 		replace_reg (src1, REGNO (*src2));
! 		replace_reg (src2, tmp);
  	     }
  	    break;
  


More information about the Gcc-patches mailing list