This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

g77.f-torture/compile/980424-0.f and bug in reload.c


Hi,

I think g77.f-torture/compile/980424-0.f has something to do with
find_reloads in reload.c:

      else if (code == SUBREG)
	{
	  rtx reg = SUBREG_REG (recog_operand[i]);
	  rtx op
	    = find_reloads_toplev (recog_operand[i], i, address_type[i],
				   ind_levels,
				   set != 0
				   && &SET_DEST (set) == recog_operand_loc[i]);

	  /* If we made a MEM to load (a part of) the stackslot of a pseudo
	     that didn't get a hard register, emit a USE with a REG_EQUAL
	     note in front so that we might inherit a previous, possibly
	     wider reload.  */
	     
	  if (GET_CODE (op) == MEM
	      && GET_CODE (reg) == REG
	      && (GET_MODE_SIZE (GET_MODE (reg))
		  >= GET_MODE_SIZE (GET_MODE (op))))
            REG_NOTES (emit_insn_before (gen_rtx_USE (VOIDmode, reg), insn))
              = gen_rtx_EXPR_LIST (REG_EQUAL,
				   reg_equiv_memory_loc[REGNO (reg)], NULL_RTX);

	  substed_operand[i] = recog_operand[i] = *recog_operand_loc[i] = op;
	}

The problem is op may not satisfy constraints. In that case, the insn
wants a fp register and op is an interger constant.


-- 
H.J. Lu (hjl@gnu.org)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]