From a11c61d20b95777d95db0ae12c550d39bba89d95 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Thu, 3 Jul 2003 13:08:10 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 19 ------------------- gcc/testsuite/ChangeLog | 5 +++++ .../gcc.c-torture/compile/20030703-1.c | 10 ++++++++++ 4 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20030703-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61c2e01a3fc..1bd44b8d020 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-07-03 Roger Sayle + + 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 * config/m32r/m32r.c: Fix comment typos. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 7751cb95a37..c4826c784af 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 205ac70d06e..70bc1834e9a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-07-03 Roger Sayle + + PR target/10700 + * gcc.c-torture/compile/20030703-1.c: New test case. + 2003-07-03 Mark Mitchell * 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 00000000000..4b45f5e574b --- /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)))); +} +