The following patch fixes https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65647
This very complicated problem occurred in rare cases when chain of reloads involving at least two pseudos and insns were generated and one pseudo was spilled on later sub-passes after spilling sub-pass and this pattern happened to be repeated.
The patch was bootstrapped and tested on x86/x86-64, ppc64, and aarch64. Committed as rev.221867. 2015-04-04 Vladimir Makarov <vmaka...@redhat.com> PR target/65647 * lra-int.h (LRA_MAX_REMATERIALIZATION_PASSES): New. Add its value checking. (lra_rematerialization_iter): New. * lra.c (lra): Initialize lra_rematerialization_iter. Stop updating lra_constraint_new_regno_start after switching of inheritance and rematerialization. * lra-remat.c (lra_rematerialization_iter): New. (lra_remat): Add printing pass iteration. Do rematerialization only first LRA_MAX_REMATERIALIZATION_PASSES iterations. 2015-04-04 Vladimir Makarov <vmaka...@redhat.com> PR target/65647 * gcc.target/arm/pr65647.c: New.