From 52400df37783c34b1e3ea22b405119373873b241 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Thu, 26 Nov 2015 22:13:36 +0000 Subject: [PATCH] re PR rtl-optimization/67954 (internal compiler error: in patch_jump_insn, at cfgrtl.c:1303) 2015-11-25 Vladimir Makarov PR rtl-optimization/67954 * lra-constraints.c (curr_insn_transform): Add check on scratch pseudo when change class to NO_REGS. Add an assert. From-SVN: r230986 --- gcc/ChangeLog | 6 ++++++ gcc/lra-constraints.c | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 89bef0528605..ee1d24075cdd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-11-25 Vladimir Makarov + + PR rtl-optimization/67954 + * lra-constraints.c (curr_insn_transform): Add check on scratch + pseudo when change class to NO_REGS. Add an assert. + 2015-11-26 Kyrylo Tkachov Backport from mainline diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index ae8f3cd949da..fc4bec879efb 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -3635,7 +3635,8 @@ curr_insn_transform (void) assigment pass and the scratch pseudo will be spilled. Spilled scratch pseudos are transformed back to scratches at the LRA end. */ - && lra_former_scratch_operand_p (curr_insn, i)) + && lra_former_scratch_operand_p (curr_insn, i) + && lra_former_scratch_p (REGNO (op))) { int regno = REGNO (op); lra_change_class (regno, NO_REGS, " Change to", true); @@ -3644,6 +3645,8 @@ curr_insn_transform (void) spilled pseudo as there is only one such insn, the current one. */ reg_renumber[regno] = -1; + lra_assert (bitmap_single_bit_set_p + (&lra_reg_info[REGNO (op)].insn_bitmap)); } /* We can do an optional reload. If the pseudo got a hard reg, we might improve the code through inheritance. If -- 2.47.2