From: dj Date: Sat, 30 May 2015 06:05:54 +0000 (+0000) Subject: * expmed.c (extract_bit_field_1): Avoid clobbering a X-Git-Tag: upstream/6.1~6788 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d342df1826807be1e1ac5b6569ceda019163508a;p=platform%2Fupstream%2Flinaro-gcc.git * expmed.c (extract_bit_field_1): Avoid clobbering a yet-to-be-used base/index register. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@223885 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 76992ee..2f3fcae 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-05-28 DJ Delorie + + * expmed.c (extract_bit_field_1): Avoid clobbering a + yet-to-be-used base/index register. + 2015-05-30 Jan Hubicka * alias.c (alias_set_entry_d): Add is_pointer and has_pointer. diff --git a/gcc/expmed.c b/gcc/expmed.c index fa13f8c..4b2b026 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -1616,6 +1616,11 @@ extract_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize, if (target == 0 || !REG_P (target) || !valid_multiword_target_p (target)) target = gen_reg_rtx (mode); + /* In case we're about to clobber a base register or something + (see gcc.c-torture/execute/20040625-1.c). */ + if (reg_mentioned_p (target, str_rtx)) + target = gen_reg_rtx (mode); + /* Indicate for flow that the entire target reg is being set. */ emit_clobber (target);