diff options
author | Roger Sayle <roger@eyesopen.com> | 2003-07-03 13:08:10 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2003-07-03 13:08:10 +0000 |
commit | a11c61d20b95777d95db0ae12c550d39bba89d95 (patch) | |
tree | 90ec82e089b4e9a934a87786055ab19202f526fc | |
parent | dab66575b48e837d71b2d2363c1b8aea1eb268a1 (diff) | |
download | gcc-a11c61d20b95777d95db0ae12c550d39bba89d95.zip gcc-a11c61d20b95777d95db0ae12c550d39bba89d95.tar.gz gcc-a11c61d20b95777d95db0ae12c550d39bba89d95.tar.bz2 |
re PR target/10700 (ICE in copy_to_mode_reg on 64-bit targets)
PR target/10700
* fold-const.c (extract_muldiv_1): There's nothing that can be done
if the expression is a SAVE_EXPR.
* gcc.c-torture/compile/20030703-1.c: New test case.
From-SVN: r68877
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20030703-1.c | 10 |
4 files changed, 21 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61c2e01..1bd44b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-07-03 Roger Sayle <roger@eyesopen.com> + + PR target/10700 + * fold-const.c (extract_muldiv_1): There's nothing that can be done + if the expression is a SAVE_EXPR. + 2003-07-03 Kazu Hirata <kazu@cs.umass.edu> * config/m32r/m32r.c: Fix comment typos. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 7751cb9..c4826c7 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -4150,25 +4150,6 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type) TREE_OPERAND (t, 1)); break; - case SAVE_EXPR: - /* If this has not been evaluated and the operand has no side effects, - we can see if we can do something inside it and make a new one. - Note that this test is overly conservative since we can do this - if the only reason it had side effects is that it was another - similar SAVE_EXPR, but that isn't worth bothering with. */ - if (SAVE_EXPR_RTL (t) == 0 && ! TREE_SIDE_EFFECTS (TREE_OPERAND (t, 0)) - && 0 != (t1 = extract_muldiv (TREE_OPERAND (t, 0), c, code, - wide_type))) - { - t1 = save_expr (t1); - if (SAVE_EXPR_PERSISTENT_P (t) && TREE_CODE (t1) == SAVE_EXPR) - SAVE_EXPR_PERSISTENT_P (t1) = 1; - if (is_pending_size (t)) - put_pending_size (t1); - return t1; - } - break; - case LSHIFT_EXPR: case RSHIFT_EXPR: /* If the second operand is constant, this is a multiplication or floor division, by a power of two, so we can treat it that diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 205ac70..70bc183 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-07-03 Roger Sayle <roger@eyesopen.com> + + PR target/10700 + * gcc.c-torture/compile/20030703-1.c: New test case. + 2003-07-03 Mark Mitchell <mark@codesourcery.com> * g++.dg/template/local3.C: Remove extra semicolon. diff --git a/gcc/testsuite/gcc.c-torture/compile/20030703-1.c b/gcc/testsuite/gcc.c-torture/compile/20030703-1.c new file mode 100644 index 0000000..4b45f5e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20030703-1.c @@ -0,0 +1,10 @@ +/* Extracted from PR target/10700. */ +/* The following code used to cause an ICE on 64-bit targets. */ + +int SAD_Block(int *); +void MBMotionEstimation(int *act_block, int block) +{ + SAD_Block(act_block + ( (8 * (block == 1 || block == 3)) + + (8 * (block == 2 || block == 3)))); +} + |