[gnu.gcc.bug] Fix for: bug in gcc-1.36 for pyramid.

tege@sics.se (Torbj|rn Granlund) (10/22/89)

    x(p)
	 char *p;
    {
      return ((p[0] & ~' ') == (p[1] & ~' '));
    }

Code like this used to generate a subreg expression which was not
handled correctly.  This has been fixed in my current version by
adding a

  "(GET_CODE (operands[0]) != GET_CODE (operands[1]))"

rejection test to the recognition patterns for compare HI and QI, in
order to avoid constraint problems if the register-register case
arises, and allowing SUBREG where REG is allowed in extend_and_branch.

Please apply these patches.  Ignore any line offsets, caused by
additional changes in my sources.

*** aux-output.c~	Sat Oct 21 05:41:36 1989
- --- aux-output.c	Sat Oct 21 23:44:41 1989
***************
*** 330,336 ****
  	  op1 = extend_const (op1, extop, GET_MODE (op0), SImode);
  	  op0 = ensure_extended (op0, extop);
  	}
!       else if (code0 == REG && code1 == REG)
  	{
  	  /* I could do this case without extension, by using the virtual
  	     register address (but that would lose for global regs).  */
- --- 330,337 ----
  	  op1 = extend_const (op1, extop, GET_MODE (op0), SImode);
  	  op0 = ensure_extended (op0, extop);
  	}
!       else if ((code0 == REG || code0 == SUBREG)
! 	       && (code1 == REG || code1 == SUBREG))
  	{
  	  /* I could do this case without extension, by using the virtual
  	     register address (but that would lose for global regs).  */
*** md~	Sat Oct 21 03:27:36 1989
- --- md	Sat Oct 21 23:31:44 1989
***************
*** 188,194 ****
    [(set (cc0)
  	(compare (match_operand:HI 0 "nonimmediate_operand" "r,m")
  		 (match_operand:HI 1 "nonimmediate_operand" "m,r")))]
!   ""
    "*
  {
    rtx br_insn = NEXT_INSN (insn);
- --- 188,194 ----
    [(set (cc0)
  	(compare (match_operand:HI 0 "nonimmediate_operand" "r,m")
  		 (match_operand:HI 1 "nonimmediate_operand" "m,r")))]
!   "(GET_CODE (operands[0]) != GET_CODE (operands[1]))"
    "*
  {
    rtx br_insn = NEXT_INSN (insn);
***************
*** 260,266 ****
    [(set (cc0)
  	(compare (match_operand:QI 0 "nonimmediate_operand" "r,m")
  		 (match_operand:QI 1 "nonimmediate_operand" "m,r")))]
!   ""
    "*
  {
    rtx br_insn = NEXT_INSN (insn);
- --- 260,266 ----
    [(set (cc0)
  	(compare (match_operand:QI 0 "nonimmediate_operand" "r,m")
  		 (match_operand:QI 1 "nonimmediate_operand" "m,r")))]
!   "(GET_CODE (operands[0]) != GET_CODE (operands[1]))"
    "*
  {
    rtx br_insn = NEXT_INSN (insn);

------- End of Blind-Carbon-Copy