aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-06-07 16:45:06 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-06-07 16:45:06 -0700
commit3b009185b3b4a8f44bd656db309e9440d0be89f4 (patch)
treeff523e8bde2734af88809324b8e0c90d3f0a3605 /gcc/rtlanal.c
parente4cd04f442cd62d2c25d538d2b59078f3fcb822d (diff)
downloadgcc-3b009185b3b4a8f44bd656db309e9440d0be89f4.zip
gcc-3b009185b3b4a8f44bd656db309e9440d0be89f4.tar.gz
gcc-3b009185b3b4a8f44bd656db309e9440d0be89f4.tar.bz2
re PR rtl-optimization/21528 (Boost shared_ptr_test.cpp fails with -O3)
PR rtl-opt/21528 * rtlanal.c (reg_overlap_mentioned_p) <MEM>: Handle 'E' formats. From-SVN: r100730
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 0bdcbba..2561e32 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -1309,8 +1309,18 @@ reg_overlap_mentioned_p (rtx x, rtx in)
fmt = GET_RTX_FORMAT (GET_CODE (in));
for (i = GET_RTX_LENGTH (GET_CODE (in)) - 1; i >= 0; i--)
- if (fmt[i] == 'e' && reg_overlap_mentioned_p (x, XEXP (in, i)))
- return 1;
+ if (fmt[i] == 'e')
+ {
+ if (reg_overlap_mentioned_p (x, XEXP (in, i)))
+ return 1;
+ }
+ else if (fmt[i] == 'E')
+ {
+ int j;
+ for (j = XVECLEN (in, i) - 1; j >= 0; --j)
+ if (reg_overlap_mentioned_p (x, XVECEXP (in, i, j)))
+ return 1;
+ }
return 0;
}