aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-05-08 09:30:54 +0200
committerJakub Jelinek <jakub@redhat.com>2020-05-08 09:30:54 +0200
commitaf1634f1b555004753a22d1124dbb8419ee095cb (patch)
tree0248c89291a324cd6af2806c61e8c29b6b6f95ce /gcc
parent88fdafb10608c8d01048f91213d67669988d62f4 (diff)
downloadgcc-af1634f1b555004753a22d1124dbb8419ee095cb.zip
gcc-af1634f1b555004753a22d1124dbb8419ee095cb.tar.gz
gcc-af1634f1b555004753a22d1124dbb8419ee095cb.tar.bz2
csa: Fix --enable-checking=yes,df bootstrap failure in csa [PR94961]
My recent combine-stack-adj.c change broke df checking bootstrap, while most of the changes are done through validate_change/confirm_changes which update df info, the removal of REG_EQUAL notes didn't update df info. 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR bootstrap/94961 PR rtl-optimization/94516 * rtl.h (remove_reg_equal_equiv_notes): Add a bool argument defaulted to false. * rtlanal.c (remove_reg_equal_equiv_notes): Add no_rescan argument. Call df_notes_rescan if that argument is not true and returning true. * combine.c (adjust_for_new_dest): Pass true as second argument to remove_reg_equal_equiv_notes. * postreload.c (reload_combine_recognize_pattern): Don't call df_notes_rescan.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/combine.c2
-rw-r--r--gcc/postreload.c9
-rw-r--r--gcc/rtl.h2
-rw-r--r--gcc/rtlanal.c7
5 files changed, 24 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 36226e0..27f6ea4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2020-05-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/94961
+ PR rtl-optimization/94516
+ * rtl.h (remove_reg_equal_equiv_notes): Add a bool argument defaulted
+ to false.
+ * rtlanal.c (remove_reg_equal_equiv_notes): Add no_rescan argument.
+ Call df_notes_rescan if that argument is not true and returning true.
+ * combine.c (adjust_for_new_dest): Pass true as second argument to
+ remove_reg_equal_equiv_notes.
+ * postreload.c (reload_combine_recognize_pattern): Don't call
+ df_notes_rescan.
+
2020-05-07 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (*setnbc_<un>signed_<GPR:mode>): New
diff --git a/gcc/combine.c b/gcc/combine.c
index f69413a..b044f29 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2459,7 +2459,7 @@ static void
adjust_for_new_dest (rtx_insn *insn)
{
/* For notes, be conservative and simply remove them. */
- remove_reg_equal_equiv_notes (insn);
+ remove_reg_equal_equiv_notes (insn, true);
/* The new insn will have a destination that was previously the destination
of an insn just above it. Call distribute_links to make a LOG_LINK from
diff --git a/gcc/postreload.c b/gcc/postreload.c
index 677b824..f625828 100644
--- a/gcc/postreload.c
+++ b/gcc/postreload.c
@@ -1223,11 +1223,10 @@ reload_combine_recognize_pattern (rtx_insn *insn)
/* Delete the reg-reg addition. */
delete_insn (insn);
- if (reg_state[regno].offset != const0_rtx
- /* Previous REG_EQUIV / REG_EQUAL notes for PREV
- are now invalid. */
- && remove_reg_equal_equiv_notes (prev))
- df_notes_rescan (prev);
+ if (reg_state[regno].offset != const0_rtx)
+ /* Previous REG_EQUIV / REG_EQUAL notes for PREV
+ are now invalid. */
+ remove_reg_equal_equiv_notes (prev);
reg_state[regno].use_index = RELOAD_COMBINE_MAX_USES;
return true;
diff --git a/gcc/rtl.h b/gcc/rtl.h
index b29afca..b0b1aac 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -3500,7 +3500,7 @@ extern void add_args_size_note (rtx_insn *, poly_int64);
extern void add_shallow_copy_of_reg_note (rtx_insn *, rtx);
extern rtx duplicate_reg_note (rtx);
extern void remove_note (rtx_insn *, const_rtx);
-extern bool remove_reg_equal_equiv_notes (rtx_insn *);
+extern bool remove_reg_equal_equiv_notes (rtx_insn *, bool = false);
extern void remove_reg_equal_equiv_notes_for_regno (unsigned int);
extern int side_effects_p (const_rtx);
extern int volatile_refs_p (const_rtx);
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 0ebde76..9ff17ca 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -2480,10 +2480,11 @@ remove_note (rtx_insn *insn, const_rtx note)
}
/* Remove REG_EQUAL and/or REG_EQUIV notes if INSN has such notes.
- Return true if any note has been removed. */
+ If NO_RESCAN is false and any notes were removed, call
+ df_notes_rescan. Return true if any note has been removed. */
bool
-remove_reg_equal_equiv_notes (rtx_insn *insn)
+remove_reg_equal_equiv_notes (rtx_insn *insn, bool no_rescan)
{
rtx *loc;
bool ret = false;
@@ -2500,6 +2501,8 @@ remove_reg_equal_equiv_notes (rtx_insn *insn)
else
loc = &XEXP (*loc, 1);
}
+ if (ret && !no_rescan)
+ df_notes_rescan (insn);
return ret;
}