diff options
author | DJ Delorie <dj@redhat.com> | 2015-05-30 02:05:54 -0400 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2015-05-30 02:05:54 -0400 |
commit | 7d21a61eb5c0a7d12fa4b2bf2dfcb5ca7398a5bb (patch) | |
tree | 02c55244e5bbe09a6689a353f5aedb8a06e224a6 /gcc/expmed.c | |
parent | ec3dfdac4d750a0c2bd2aa4caadc47054c9602cf (diff) | |
download | gcc-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/expmed.c')
-rw-r--r-- | gcc/expmed.c | 5 |
1 files changed, 5 insertions, 0 deletions
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); |