aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2015-05-30 02:05:54 -0400
committerDJ Delorie <dj@gcc.gnu.org>2015-05-30 02:05:54 -0400
commit7d21a61eb5c0a7d12fa4b2bf2dfcb5ca7398a5bb (patch)
tree02c55244e5bbe09a6689a353f5aedb8a06e224a6 /gcc
parentec3dfdac4d750a0c2bd2aa4caadc47054c9602cf (diff)
downloadgcc-7d21a61eb5c0a7d12fa4b2bf2dfcb5ca7398a5bb.zip
gcc-7d21a61eb5c0a7d12fa4b2bf2dfcb5ca7398a5bb.tar.gz
gcc-7d21a61eb5c0a7d12fa4b2bf2dfcb5ca7398a5bb.tar.bz2
expmed.c (extract_bit_field_1): Avoid clobbering a yet-to-be-used base/index register.
* expmed.c (extract_bit_field_1): Avoid clobbering a yet-to-be-used base/index register. From-SVN: r223885
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/expmed.c5
2 files changed, 10 insertions, 0 deletions
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 <dj@redhat.com>
+
+ * expmed.c (extract_bit_field_1): Avoid clobbering a
+ yet-to-be-used base/index register.
+
2015-05-30 Jan Hubicka <hubicka@ucw.cz>
* 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);