This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix 70083, lra-induced crash
- From: Vladimir Makarov <vmakarov at redhat dot com>
- To: Bernd Schmidt <bschmidt at redhat dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 10 Mar 2016 12:56:52 -0500
- Subject: Re: Fix 70083, lra-induced crash
- Authentication-results: sourceware.org; auth=none
- References: <56E12ADA dot 5060400 at t-online dot de> <56E12FAC dot 9000407 at redhat dot com>
On 03/10/2016 03:26 AM, Bernd Schmidt wrote:
This crash happens because LRA tries to save an AVX hard reg in a
large mode, and it only appears in the function in smaller modes.
Stack alignment isn't set up to support the larger mode.
Currently, biggest_mode for hard registers is set up from
regno_reg_rtx, set up to a large mode for argument regs. That mode is
not necessarily seen in the function itself and may be too large. If
that initialization is changed to use VOIDmode, we compute the correct
value during lra_push_insns, but then subsequently we clear it to
VOIDmode again, and it never seems to get updated. Hence, the patch
has several parts: initialize hard reg biggest_mode with VOIDmode,
ensure it gets updated during process_bb_lives, and use the value in
split_reg.
Bootstrapped and tested on x86_64-linux, ok?
Yes. Thank you, Bernd.