aboutsummaryrefslogtreecommitdiff
path: root/gcc/fixed-value.c
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2016-11-01 17:16:33 +0000
committerMax Filippov <jcmvbkbc@gcc.gnu.org>2016-11-01 17:16:33 +0000
commitad89d820bf04a06b636fe7ecd37e4e6e4a1942d5 (patch)
treebcd7af4c2659c69e60e6ea832ebe225bf5664f49 /gcc/fixed-value.c
parentaaec3d850a73cd951ccec98f2f55d62832ca2ee2 (diff)
downloadgcc-ad89d820bf04a06b636fe7ecd37e4e6e4a1942d5.zip
gcc-ad89d820bf04a06b636fe7ecd37e4e6e4a1942d5.tar.gz
gcc-ad89d820bf04a06b636fe7ecd37e4e6e4a1942d5.tar.bz2
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. 2016-11-01 Max Filippov <jcmvbkbc@gmail.com> gcc/ * 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. From-SVN: r241748
Diffstat (limited to 'gcc/fixed-value.c')
0 files changed, 0 insertions, 0 deletions