On Mon, 15 Jan 2018, Jakub Jelinek wrote: > Hi! > > On the testcase in the PR (too large and creduce not making sufficient > progress) we ICE because i386.md: > ;; Combining simple memory jump instruction > > (define_peephole2 > [(set (match_operand:W 0 "register_operand") > (match_operand:W 1 "memory_operand")) > (set (pc) (match_dup 0))] > "!TARGET_X32 > && !ix86_indirect_branch_thunk_register > && peep2_reg_dead_p (2, operands[0])" > [(set (pc) (match_dup 1))]) > > peephole2 triggers on a CROSSING_JUMP_P jump, but nothing actually > copies that bit over from the old to the new JUMP_INSN. > > Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for > trunk?
Ok. Richard. > 2018-01-15 Jakub Jelinek <ja...@redhat.com> > > PR rtl-optimization/83213 > * recog.c (peep2_attempt): Copy over CROSSING_JUMP_P from peepinsn > to last if both are JUMP_INSNs. > > --- gcc/recog.c.jj 2018-01-09 08:58:14.594002069 +0100 > +++ gcc/recog.c 2018-01-15 16:37:13.279196178 +0100 > @@ -3446,6 +3446,8 @@ peep2_attempt (basic_block bb, rtx_insn > last = emit_insn_after_setloc (attempt, > peep2_insn_data[i].insn, > INSN_LOCATION (peepinsn)); > + if (JUMP_P (peepinsn) && JUMP_P (last)) > + CROSSING_JUMP_P (last) = CROSSING_JUMP_P (peepinsn); > before_try = PREV_INSN (insn); > delete_insn_chain (insn, peep2_insn_data[i].insn, false); > > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)