http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60438
--- Comment #25 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to linzj from comment #23) > (In reply to Richard Henderson from comment #19) > > Created attachment 32311 [details] > > proposed patch > > > > Running full tests on this overnight, but it fixes the ICE. > > I try to remove the following hunk from you patch,it compiles Jakub's > testcase right.Not run the full tests yet. > diff --git a/gcc/combine-stack-adj.c b/gcc/combine-stack-adj.c > index 69fd5ea..5abec30 100644 > --- a/gcc/combine-stack-adj.c > +++ b/gcc/combine-stack-adj.c > @@ -454,6 +454,14 @@ combine_stack_adjustments_for_block (basic_block bb) > { > HOST_WIDE_INT this_adjust = INTVAL (XEXP (src, 1)); > > + /* It's quite tricky to adjust the notes associated > + with frame related insns. */ > + if (RTX_FRAME_RELATED_P (insn)) > + { > + last2_sp_set = last_sp_set = NULL; > + continue; > + } > + > /* If we've not seen an adjustment previously, record > it now and continue. */ > if (! last_sp_set) Perhaps we can handle some most common cases of frame related insns (e.g. if both have REG_CFA_ADJUST_CFA notes, etc.), perhaps it would be worth it to run a bootstrap which would log when the above hunk prevented some merging and append both insns to some /tmp/ file across whole bootstrap, then we could see what is common enough to care about.