aboutsummaryrefslogtreecommitdiff
path: root/gcc/lower-subreg.c
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2007-09-05 05:31:37 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2007-09-05 05:31:37 +0000
commitbda9fc3983d164a64512e0a5d5d845ea008502cc (patch)
treecd7bcf09d04d0b5ca7d8e3d962ba7dcd790a2eab /gcc/lower-subreg.c
parent437cc56a07a35aab6bd51ed66b00fc9549076f97 (diff)
downloadgcc-bda9fc3983d164a64512e0a5d5d845ea008502cc.zip
gcc-bda9fc3983d164a64512e0a5d5d845ea008502cc.tar.gz
gcc-bda9fc3983d164a64512e0a5d5d845ea008502cc.tar.bz2
re PR middle-end/33029 (libgcc2.c:1890: internal compiler error: in local_cprop_pass, at gcse.c:3236)
PR middle-end/33029 * lower-subreg.c (resolve_clobber): If we remove a REG_LIBCALL note, remove the associated REG_RETVAL note. From-SVN: r128119
Diffstat (limited to 'gcc/lower-subreg.c')
-rw-r--r--gcc/lower-subreg.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c
index 4354640..696ec61 100644
--- a/gcc/lower-subreg.c
+++ b/gcc/lower-subreg.c
@@ -897,7 +897,7 @@ resolve_simple_move (rtx set, rtx insn)
static bool
resolve_clobber (rtx pat, rtx insn)
{
- rtx reg;
+ rtx reg, note;
enum machine_mode orig_mode;
unsigned int words, i;
int ret;
@@ -909,8 +909,10 @@ resolve_clobber (rtx pat, rtx insn)
/* If this clobber has a REG_LIBCALL note, then it is the initial
clobber added by emit_no_conflict_block. We were able to
decompose the register, so we no longer need the clobber. */
- if (find_reg_note (insn, REG_LIBCALL, NULL_RTX) != NULL_RTX)
+ note = find_reg_note (insn, REG_LIBCALL, NULL_RTX);
+ if (note != NULL_RTX)
{
+ remove_retval_note (XEXP (note, 0));
delete_insn (insn);
return true;
}