diff options
author | Tom de Vries <tom@codesourcery.com> | 2012-10-16 20:32:45 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2012-10-16 20:32:45 +0000 |
commit | f841b68397bb8b15ea570a7a86c5414f62cc9774 (patch) | |
tree | 48512b7be16b93e76a8180a2cb924564b49d714a /gcc | |
parent | 7181e991b54aaee6a21afb372611523a09a0dc00 (diff) | |
download | gcc-f841b68397bb8b15ea570a7a86c5414f62cc9774.zip gcc-f841b68397bb8b15ea570a7a86c5414f62cc9774.tar.gz gcc-f841b68397bb8b15ea570a7a86c5414f62cc9774.tar.bz2 |
2012-10-16 Tom de Vries <tom@codesourcery.com>
* expr.c (move_by_pieces, move_by_pieces_ninsns, can_store_by_pieces)
(store_by_pieces_1): Don't enter loop when no more data is left.
From-SVN: r192514
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expr.c | 8 |
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0b14270..14b817d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-10-16 Tom de Vries <tom@codesourcery.com> + + * expr.c (move_by_pieces, move_by_pieces_ninsns, can_store_by_pieces) + (store_by_pieces_1): Don't enter loop when no more data is left. + 2012-10-16 Joern Rennecke <joern.rennecke@embecosm.com> * loop-doloop.c (doloop_modify): Pass doloop_end pattern to @@ -966,7 +966,7 @@ move_by_pieces (rtx to, rtx from, unsigned HOST_WIDE_INT len, /* First move what we can in the largest integer mode, then go to successively smaller modes. */ - while (max_size > 1) + while (max_size > 1 && data.len > 0) { enum machine_mode mode = widest_int_mode_for_size (max_size); @@ -1026,7 +1026,7 @@ move_by_pieces_ninsns (unsigned HOST_WIDE_INT l, unsigned int align, align = alignment_for_piecewise_move (MOVE_MAX_PIECES, align); - while (max_size > 1) + while (max_size > 1 && l > 0) { enum machine_mode mode; enum insn_code icode; @@ -2417,7 +2417,7 @@ can_store_by_pieces (unsigned HOST_WIDE_INT len, { l = len; max_size = STORE_MAX_PIECES + 1; - while (max_size > 1) + while (max_size > 1 && l > 0) { mode = widest_int_mode_for_size (max_size); @@ -2612,7 +2612,7 @@ store_by_pieces_1 (struct store_by_pieces_d *data ATTRIBUTE_UNUSED, /* First store what we can in the largest integer mode, then go to successively smaller modes. */ - while (max_size > 1) + while (max_size > 1 && data->len > 0) { enum machine_mode mode = widest_int_mode_for_size (max_size); |