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
This commit is contained in:
Roger Sayle 2003-07-03 13:08:10 +00:00 committed by Roger Sayle
parent dab66575b4
commit a11c61d20b
4 changed files with 21 additions and 19 deletions

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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))));
}