From 6c051d60a93154eae6e916ac87f69b79552f202a Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Wed, 25 Nov 2015 17:58:35 +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: r230894 --- gcc/ChangeLog | 6 ++++++ gcc/lra-constraints.c | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7b856bb0633..48f96a0707d 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-25 Nathan Sidwell * config/nvptx/nvptx.md (load_arg_reg): Arg number diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 4670e811b3a..c62bf6a2cea 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -3725,7 +3725,8 @@ curr_insn_transform (bool check_only_p) 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); @@ -3734,6 +3735,8 @@ curr_insn_transform (bool check_only_p) 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.30.2