This is the mail archive of the gcc-cvs@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]
Other format: [Raw text]

r248713 - in /branches/gcc-6-branch/gcc: Change...


Author: jcmvbkbc
Date: Wed May 31 00:05:01 2017
New Revision: 248713

URL: https://gcc.gnu.org/viewcvs?rev=248713&root=gcc&view=rev
Log:
xtensa: Fix PR target/78118

It started failing after the following commit: 32e90dc6a0cda45 ("PR
rtl-optimization/61047").

The change that made xtensa backend go ICE looks completely unrelated,
and indeed, the issue is caused by the side effect of
compute_frame_size() function call hidden in the
INITIAL_ELIMINATION_OFFSET macro. This call updates the value of the
xtensa_current_frame_size static variable, used in "return" instruction
predicate. Prior to the change the value of xtensa_current_frame_size was
set to 0 after the end of epilogue generation, which enabled the "return"
instruction for the CALL0 ABI, but after the change the additional
INITIAL_ELIMINATION_OFFSET calls make xtensa_current_frame_size non-zero
and "return" pattern unavailable.

Get rid of the global xtensa_current_frame_size and
xtensa_callee_save_size variables by moving them into the
machine_function structure. Implement predicate for the "return" pattern
as a function. Don't communicate completion of epilogue generation
through zeroing of xtensa_current_frame_size, add explicit epilogue_done
variable to the machine_function structure. Don't update stack frame
layout after the completion of reload.

2017-05-30  Max Filippov  <jcmvbkbc@gmail.com>
gcc/
	Backport from mainline
	2016-11-01  Max Filippov  <jcmvbkbc@gmail.com>

	* config/xtensa/xtensa-protos.h
	(xtensa_use_return_instruction_p): New prototype.
	* config/xtensa/xtensa.c (xtensa_current_frame_size,
	xtensa_callee_save_size): Remove.
	(struct machine_function): Add new fields: current_frame_size,
	callee_save_size, frame_laid_out and epilogue_done.
	(compute_frame_size, xtensa_expand_prologue,
	xtensa_expand_epilogue): Replace xtensa_callee_save_size with
	cfun->machine->callee_save_size and xtensa_current_frame_size
	with cfun->machine->current_frame_size.
	(compute_frame_size): Update cfun->machine->frame_laid_out and
	don't update frame layout after reload completion.
	(xtensa_expand_epilogue): Set cfun->machine->epilogue_done
	instead of zeroing xtensa_current_frame_size.
	(xtensa_use_return_instruction_p): New function.
	* config/xtensa/xtensa.h (xtensa_current_frame_size): Remove
	declaration.
	(INITIAL_ELIMINATION_OFFSET): Use return value of
	compute_frame_size instead of xtensa_current_frame_size value.
	* config/xtensa/xtensa.md ("return" pattern): Use new predicate
	function xtensa_use_return_instruction_p instead of inline code.


Modified:
    branches/gcc-6-branch/gcc/ChangeLog
    branches/gcc-6-branch/gcc/config/xtensa/xtensa-protos.h
    branches/gcc-6-branch/gcc/config/xtensa/xtensa.c
    branches/gcc-6-branch/gcc/config/xtensa/xtensa.h
    branches/gcc-6-branch/gcc/config/xtensa/xtensa.md


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