From: Tom de Vries Date: Tue, 16 Oct 2012 20:32:45 +0000 (+0000) Subject: 2012-10-16 Tom de Vries X-Git-Tag: misc/gccgo-go1_1_2~134 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f841b68397bb8b15ea570a7a86c5414f62cc9774;p=thirdparty%2Fgcc.git 2012-10-16 Tom de Vries * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0b14270ee512..14b817d840c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-10-16 Tom de Vries + + * 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 * loop-doloop.c (doloop_modify): Pass doloop_end pattern to diff --git a/gcc/expr.c b/gcc/expr.c index 304317636495..8fa19fd5ce13 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -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);