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.

Reply via email to