Commit 8b059232 by Sebastian Pop Committed by Sebastian Pop

chrec_apply should only apply to the specified variable.

2010-07-15  Sebastian Pop  <sebastian.pop@amd.com>

	* tree-chrec.c (chrec_apply): Should only apply to the specified
	variable.  Also handle multivariate chains of recurrences that
	satisfy evolution_function_is_affine_p.  Also handle CASE_CONVERT.

From-SVN: r163140
parent 2e286fd2
2010-08-02 Sebastian Pop <sebastian.pop@amd.com> 2010-08-02 Sebastian Pop <sebastian.pop@amd.com>
* tree-chrec.c (chrec_apply): Should only apply to the specified
variable. Also handle multivariate chains of recurrences that
satisfy evolution_function_is_affine_p. Also handle CASE_CONVERT.
2010-08-02 Sebastian Pop <sebastian.pop@amd.com>
* graphite-clast-to-gimple.c (debug_clast_name_index): Removed. * graphite-clast-to-gimple.c (debug_clast_name_index): Removed.
(debug_clast_name_indexes_1): Removed. (debug_clast_name_indexes_1): Removed.
(debug_clast_name_indexes): Removed. (debug_clast_name_indexes): Removed.
......
2010-07-15 Sebastian Pop <sebastian.pop@amd.com> 2010-07-15 Sebastian Pop <sebastian.pop@amd.com>
* tree-chrec.c (chrec_apply): Should only apply to the specified
variable. Also handle multivariate chains of recurrences that
satisfy evolution_function_is_affine_p. Also handle CASE_CONVERT.
2010-07-15 Sebastian Pop <sebastian.pop@amd.com>
* graphite-clast-to-gimple.c (debug_clast_name_index): Removed. * graphite-clast-to-gimple.c (debug_clast_name_index): Removed.
(debug_clast_name_indexes_1): Removed. (debug_clast_name_indexes_1): Removed.
(debug_clast_name_indexes): Removed. (debug_clast_name_indexes): Removed.
......
...@@ -599,23 +599,40 @@ chrec_apply (unsigned var, ...@@ -599,23 +599,40 @@ chrec_apply (unsigned var,
if (TREE_CODE (x) == INTEGER_CST && SCALAR_FLOAT_TYPE_P (type)) if (TREE_CODE (x) == INTEGER_CST && SCALAR_FLOAT_TYPE_P (type))
x = build_real_from_int_cst (type, x); x = build_real_from_int_cst (type, x);
if (evolution_function_is_affine_p (chrec)) switch (TREE_CODE (chrec))
{ {
/* "{a, +, b} (x)" -> "a + b*x". */ case POLYNOMIAL_CHREC:
x = chrec_convert_rhs (type, x, NULL); if (evolution_function_is_affine_p (chrec))
res = chrec_fold_multiply (TREE_TYPE (x), CHREC_RIGHT (chrec), x); {
res = chrec_fold_plus (type, CHREC_LEFT (chrec), res); if (CHREC_VARIABLE (chrec) != var)
} return build_polynomial_chrec
(CHREC_VARIABLE (chrec),
chrec_apply (var, CHREC_LEFT (chrec), x),
chrec_apply (var, CHREC_RIGHT (chrec), x));
/* "{a, +, b} (x)" -> "a + b*x". */
x = chrec_convert_rhs (type, x, NULL);
res = chrec_fold_multiply (TREE_TYPE (x), CHREC_RIGHT (chrec), x);
res = chrec_fold_plus (type, CHREC_LEFT (chrec), res);
}
else if (TREE_CODE (x) == INTEGER_CST
&& tree_int_cst_sgn (x) == 1)
/* testsuite/.../ssa-chrec-38.c. */
res = chrec_evaluate (var, chrec, x, 0);
else
res = chrec_dont_know;
break;
else if (TREE_CODE (chrec) != POLYNOMIAL_CHREC) CASE_CONVERT:
res = chrec; res = chrec_convert (TREE_TYPE (chrec),
chrec_apply (var, TREE_OPERAND (chrec, 0), x),
NULL);
break;
else if (TREE_CODE (x) == INTEGER_CST default:
&& tree_int_cst_sgn (x) == 1) res = chrec;
/* testsuite/.../ssa-chrec-38.c. */ break;
res = chrec_evaluate (var, chrec, x, 0); }
else
res = chrec_dont_know;
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
{ {
......
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