diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2015-06-30 17:40:55 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2015-06-30 17:40:55 +0000 |
commit | ef87312ec1246b8667da99e34ecfacff595c9c21 (patch) | |
tree | 84122957f4d1831b0346a506e4c3aa47b486b0d8 /gcc/lra-constraints.c | |
parent | 8b970b6e69aeddad690f7b1465d8aeeeb07c7536 (diff) | |
download | gcc-ef87312ec1246b8667da99e34ecfacff595c9c21.zip gcc-ef87312ec1246b8667da99e34ecfacff595c9c21.tar.gz gcc-ef87312ec1246b8667da99e34ecfacff595c9c21.tar.bz2 |
re PR debug/66691 (ICE on valid code at -O3 with -g enabled in simplify_subreg, at simplify-rtx.c:5744)
2015-06-30 Vladimir Makarov <vmakarov@redhat.com>
PR debug/66691
* lra-int.h (lra_substitute_pseudo): Add a parameter.
(lra_substitute_pseudo_within_insn): Ditto.
* lra.c (lra_substitute_pseudo): Add a parameter. Simplify subreg
of constant.
(lra_substitute_pseudo_within_insn): Add a parameter. Transfer it
to lra_substitute_pseudo.
* lra-lives.c (process_bb_lives): Add an argument to
lra_substitute_pseudo_within_insn call.
* lra-constraints.c (inherit_reload_reg, split_reg): Add an
argument to lra_substitute_pseudo and
lra_substitute_pseudo_within_insn calls.
(remove_inheritance_pseudos, undo_optional_reloads): Ditto.
2015-06-30 Vladimir Makarov <vmakarov@redhat.com>
PR debug/66691
* gcc.target/i386/pr66691.c: New.
From-SVN: r225200
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 1d3f94e..75c2a77 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4711,7 +4711,7 @@ inherit_reload_reg (bool def_p, int original_regno, } return false; } - lra_substitute_pseudo_within_insn (insn, original_regno, new_reg); + lra_substitute_pseudo_within_insn (insn, original_regno, new_reg, false); lra_update_insn_regno_info (insn); if (! def_p) /* We now have a new usage insn for original regno. */ @@ -4743,7 +4743,7 @@ inherit_reload_reg (bool def_p, int original_regno, lra_assert (DEBUG_INSN_P (usage_insn)); next_usage_insns = XEXP (next_usage_insns, 1); } - lra_substitute_pseudo (&usage_insn, original_regno, new_reg); + lra_substitute_pseudo (&usage_insn, original_regno, new_reg, false); lra_update_insn_regno_info (as_a <rtx_insn *> (usage_insn)); if (lra_dump_file != NULL) { @@ -5005,7 +5005,7 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, usage_insn = XEXP (next_usage_insns, 0); lra_assert (DEBUG_INSN_P (usage_insn)); next_usage_insns = XEXP (next_usage_insns, 1); - lra_substitute_pseudo (&usage_insn, original_regno, new_reg); + lra_substitute_pseudo (&usage_insn, original_regno, new_reg, false); lra_update_insn_regno_info (as_a <rtx_insn *> (usage_insn)); if (lra_dump_file != NULL) { @@ -5925,8 +5925,9 @@ remove_inheritance_pseudos (bitmap remove_pseudos) { if (change_p && bitmap_bit_p (remove_pseudos, regno)) { - lra_substitute_pseudo_within_insn ( - curr_insn, regno, regno_reg_rtx[restore_regno]); + lra_substitute_pseudo_within_insn + (curr_insn, regno, regno_reg_rtx[restore_regno], + false); restored_regs_p = true; } else @@ -6049,9 +6050,9 @@ undo_optional_reloads (void) we remove the inheritance pseudo and the optional reload. */ } - lra_substitute_pseudo_within_insn ( - insn, regno, - regno_reg_rtx[lra_reg_info[regno].restore_regno]); + lra_substitute_pseudo_within_insn + (insn, regno, regno_reg_rtx[lra_reg_info[regno].restore_regno], + false); lra_update_insn_regno_info (insn); if (lra_dump_file != NULL) { |