Commit eac30183 by Zdenek Dvorak Committed by Zdenek Dvorak

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
parent bdda7d9c
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> 2004-12-31 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa-hpux.h (HANDLE_SYSV_PRAGMA, HANDLE_PRAGMA_PACK_PUSH_POP): Define. * pa-hpux.h (HANDLE_SYSV_PRAGMA, HANDLE_PRAGMA_PACK_PUSH_POP): Define.
......
...@@ -1955,28 +1955,40 @@ instantiate_parameters_1 (struct loop *loop, tree chrec, ...@@ -1955,28 +1955,40 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
allow_superloop_chrecs); allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, CHREC_RIGHT (chrec), op1 = instantiate_parameters_1 (loop, CHREC_RIGHT (chrec),
allow_superloop_chrecs); 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: case PLUS_EXPR:
op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0), op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0),
allow_superloop_chrecs); allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1), op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1),
allow_superloop_chrecs); 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: case MINUS_EXPR:
op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0), op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0),
allow_superloop_chrecs); allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1), op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1),
allow_superloop_chrecs); 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: case MULT_EXPR:
op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0), op0 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 0),
allow_superloop_chrecs); allow_superloop_chrecs);
op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1), op1 = instantiate_parameters_1 (loop, TREE_OPERAND (chrec, 1),
allow_superloop_chrecs); 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 NOP_EXPR:
case CONVERT_EXPR: case CONVERT_EXPR:
...@@ -1986,6 +1998,9 @@ instantiate_parameters_1 (struct loop *loop, tree chrec, ...@@ -1986,6 +1998,9 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
if (op0 == chrec_dont_know) if (op0 == chrec_dont_know)
return chrec_dont_know; return chrec_dont_know;
if (op0 == TREE_OPERAND (chrec, 0))
return chrec;
return chrec_convert (TREE_TYPE (chrec), op0); return chrec_convert (TREE_TYPE (chrec), op0);
case SCEV_NOT_KNOWN: case SCEV_NOT_KNOWN:
...@@ -2011,6 +2026,12 @@ instantiate_parameters_1 (struct loop *loop, tree chrec, ...@@ -2011,6 +2026,12 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
|| op1 == chrec_dont_know || op1 == chrec_dont_know
|| op2 == chrec_dont_know) || op2 == chrec_dont_know)
return 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), return fold (build (TREE_CODE (chrec),
TREE_TYPE (chrec), op0, op1, op2)); TREE_TYPE (chrec), op0, op1, op2));
...@@ -2022,6 +2043,10 @@ instantiate_parameters_1 (struct loop *loop, tree chrec, ...@@ -2022,6 +2043,10 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
if (op0 == chrec_dont_know if (op0 == chrec_dont_know
|| op1 == chrec_dont_know) || op1 == chrec_dont_know)
return 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)); return fold (build (TREE_CODE (chrec), TREE_TYPE (chrec), op0, op1));
case 1: case 1:
...@@ -2029,6 +2054,8 @@ instantiate_parameters_1 (struct loop *loop, tree chrec, ...@@ -2029,6 +2054,8 @@ instantiate_parameters_1 (struct loop *loop, tree chrec,
allow_superloop_chrecs); allow_superloop_chrecs);
if (op0 == chrec_dont_know) if (op0 == chrec_dont_know)
return 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)); return fold (build1 (TREE_CODE (chrec), TREE_TYPE (chrec), op0));
case 0: case 0:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment