From 66c60e67562e57ace539e135207e099075b9ab39 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Thu, 8 Nov 2001 23:33:08 +0000 Subject: [PATCH] expr.c (emit_block_move): If X is readonly emit CLOBBER for it. * expr.c (emit_block_move): If X is readonly emit CLOBBER for it. (clear_storage): Likewise, for OBJECT. From-SVN: r46865 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 69199a74e36..a718a8fadff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Nov 8 18:00:55 2001 Richard Kenner + + * expr.c (emit_block_move): If X is readonly emit CLOBBER for it. + (clear_storage): Likewise, for OBJECT. + Thu Nov 8 16:23:51 2001 Jeffrey A Law (law@cygnus.com) * pa.c (emit_move_sequence): Fix SUBREG expression to diff --git a/gcc/expr.c b/gcc/expr.c index 0cbd8fd4faa..d5c1407c182 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -1812,6 +1812,12 @@ emit_block_move (x, y, size) TREE_UNSIGNED (integer_type_node)), TYPE_MODE (integer_type_node)); #endif + + /* If we are initializing a readonly value, show the above call + clobbered it. Otherwise, a load from it may erroneously be hoisted + from a loop. */ + if (RTX_UNCHANGING_P (x)) + emit_insn (gen_rtx_CLOBBER (VOIDmode, x)); } return retval; @@ -2717,6 +2723,12 @@ clear_storage (object, size) VOIDmode, 2, object, Pmode, size, TYPE_MODE (integer_type_node)); #endif + + /* If we are initializing a readonly value, show the above call + clobbered it. Otherwise, a load from it may erroneously be + hoisted from a loop. */ + if (RTX_UNCHANGING_P (object)) + emit_insn (gen_rtx_CLOBBER (VOIDmode, object)); } }