tree-scalar-evolution.c (instantiate_parameters_1): Copy the expression only if needed.

* tree-scalar-evolution.c (instantiate_parameters_1): Copy the
	expression only if needed.

From-SVN: r92768
This commit is contained in:
Zdenek Dvorak 2004-12-31 19:03:28 +01:00 committed by Zdenek Dvorak
parent bdda7d9cc1
commit eac3018308
2 changed files with 36 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2004-12-31 Zdenek Dvorak <dvorakz@suse.cz>
* tree-scalar-evolution.c (instantiate_parameters_1): Copy the
expression only if needed.
2004-12-31 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa-hpux.h (HANDLE_SYSV_PRAGMA, HANDLE_PRAGMA_PACK_PUSH_POP): Define.

View File

@ -1955,28 +1955,40 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, CHREC_RIGHT (chrec),
allow_superloop_chrecs);
return build_polynomial_chrec (CHREC_VARIABLE (chrec), op0, op1);
if (CHREC_LEFT (chrec) != op0
|| CHREC_RIGHT (chrec) != op1)
chrec = build_polynomial_chrec (CHREC_VARIABLE (chrec), op0, op1);
return chrec;
case PLUS_EXPR:
op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0),
allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1),
allow_superloop_chrecs);
return chrec_fold_plus (TREE_TYPE (chrec), op0, op1);
if (TREE_OPERAND (chrec, 0) != op0
|| TREE_OPERAND (chrec, 1) != op1)
chrec = chrec_fold_plus (TREE_TYPE (chrec), op0, op1);
return chrec;
case MINUS_EXPR:
op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0),
allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1),
allow_superloop_chrecs);
return chrec_fold_minus (TREE_TYPE (chrec), op0, op1);
if (TREE_OPERAND (chrec, 0) != op0
|| TREE_OPERAND (chrec, 1) != op1)
chrec = chrec_fold_minus (TREE_TYPE (chrec), op0, op1);
return chrec;
case MULT_EXPR:
op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0),
allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1),
allow_superloop_chrecs);
return chrec_fold_multiply (TREE_TYPE (chrec), op0, op1);
if (TREE_OPERAND (chrec, 0) != op0
|| TREE_OPERAND (chrec, 1) != op1)
chrec = chrec_fold_multiply (TREE_TYPE (chrec), op0, op1);
return chrec;
case NOP_EXPR:
case CONVERT_EXPR:
@ -1986,6 +1998,9 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
if (op0 == chrec_dont_know)
return chrec_dont_know;
if (op0 == TREE_OPERAND (chrec, 0))
return chrec;
return chrec_convert (TREE_TYPE (chrec), op0);
case SCEV_NOT_KNOWN:
@ -2011,6 +2026,12 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
|| op1 == chrec_dont_know
|| op2 == chrec_dont_know)
return chrec_dont_know;
if (op0 == TREE_OPERAND (chrec, 0)
&& op1 == TREE_OPERAND (chrec, 1)
&& op2 == TREE_OPERAND (chrec, 2))
return chrec;
return fold (build (TREE_CODE (chrec),
TREE_TYPE (chrec), op0, op1, op2));
@ -2022,6 +2043,10 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
if (op0 == chrec_dont_know
|| op1 == chrec_dont_know)
return chrec_dont_know;
if (op0 == TREE_OPERAND (chrec, 0)
&& op1 == TREE_OPERAND (chrec, 1))
return chrec;
return fold (build (TREE_CODE (chrec), TREE_TYPE (chrec), op0, op1));
case 1:
@ -2029,6 +2054,8 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
allow_superloop_chrecs);
if (op0 == chrec_dont_know)
return chrec_dont_know;
if (op0 == TREE_OPERAND (chrec, 0))
return chrec;
return fold (build1 (TREE_CODE (chrec), TREE_TYPE (chrec), op0));
case 0: