diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 708503640b9..e2dd16a7741 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-09-05 Dale Johannesen + + * reload1.c (reload): Retain only those memory clobbers + added for variable-array handling. + 2002-09-05 Jason Thorpe * config/arm/arm.c (arm_return_in_memory): Implement ATPCS diff --git a/gcc/reload1.c b/gcc/reload1.c index c00426cf420..a85d2507126 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -1180,9 +1180,9 @@ reload (first, global) /* Make a pass over all the insns and delete all USEs which we inserted only to tag a REG_EQUAL note on them. Remove all REG_DEAD and REG_UNUSED - notes. Delete all CLOBBER insns that don't refer to the return value - or to memory (mem:BLK CLOBBERs must be retained to prevent the scheduler - from misarranging variable-array code) and simplify (subreg (reg)) + notes. Delete all CLOBBER insns, except those that refer to the return + value and the special mem:BLK CLOBBERs added to prevent the scheduler + from misarranging variable-array code, and simplify (subreg (reg)) operands. Also remove all REG_RETVAL and REG_LIBCALL notes since they are no longer useful or accurate. Strip and regenerate REG_INC notes that may have been moved around. */ @@ -1203,7 +1203,10 @@ reload (first, global) || find_reg_note (insn, REG_EQUAL, NULL_RTX))) || (GET_CODE (PATTERN (insn)) == CLOBBER && (GET_CODE (XEXP (PATTERN (insn), 0)) != MEM - || GET_MODE (XEXP (PATTERN (insn), 0)) != BLKmode) + || GET_MODE (XEXP (PATTERN (insn), 0)) != BLKmode + || (GET_CODE (XEXP (XEXP (PATTERN (insn), 0), 0)) != SCRATCH + && XEXP (XEXP (PATTERN (insn), 0), 0) + != stack_pointer_rtx)) && (GET_CODE (XEXP (PATTERN (insn), 0)) != REG || ! REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0))))) {