aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1998-10-14 14:50:40 -0600
committerJeff Law <law@gcc.gnu.org>1998-10-14 14:50:40 -0600
commit972b320cbff8d131530594aa61aee913d302becc (patch)
tree1a00d9684ead61aa00dcd814be10ad013fbfd710
parentb1966eeb0b2d7999bc68ecf9af2a098bb40818cb (diff)
downloadgcc-972b320cbff8d131530594aa61aee913d302becc.zip
gcc-972b320cbff8d131530594aa61aee913d302becc.tar.gz
gcc-972b320cbff8d131530594aa61aee913d302becc.tar.bz2
combine.c (combine_instructions): When finished, call init_recog.
8 * combine.c (combine_instructions): When finished, call init_recog. * regmove.c (optimize_reg_copy_3): Reject volatile MEMs. From-SVN: r23094
-rw-r--r--gcc/combine.c3
-rw-r--r--gcc/regmove.c5
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 619c897..f355abc 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -674,6 +674,9 @@ combine_instructions (f, nregs)
total_successes += combine_successes;
nonzero_sign_valid = 0;
+
+ /* Make recognizer allow volatile MEMs again. */
+ init_recog ();
}
/* Wipe the reg_last_xxx arrays in preparation for another pass. */
diff --git a/gcc/regmove.c b/gcc/regmove.c
index 35ddf12..55dd3f3 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -553,6 +553,11 @@ optimize_reg_copy_3 (insn, dest, src)
|| SET_DEST (set) != src_reg)
return;
+ /* Be conserative: although this optimization is also valid for
+ volatile memory references, that could cause trouble in later passes. */
+ if (MEM_VOLATILE_P (SET_SRC (set)))
+ return;
+
/* Do not use a SUBREG to truncate from one mode to another if truncation
is not a nop. */
if (GET_MODE_BITSIZE (GET_MODE (src_reg)) <= GET_MODE_BITSIZE (GET_MODE (src))