Commit 7e0923cd by Sebastian Pop Committed by Sebastian Pop

re PR tree-optimization/23391 (Tree checking failure due to scev)

	PR 23391
	* Makefile.in (tree-chrec.o): Depends on real.h.
	* tree-chrec.c: Include real.h.
	(chrec_fold_plus_poly_poly, chrec_fold_multiply_poly_poly,
	chrec_fold_plus_1): Use build_real for SCALAR_FLOAT_TYPE_P.
	* tree-scalar-evolution.c (add_to_evolution_1,
	interpret_rhs_modify_expr): Ditto.

From-SVN: r103109
parent 852c19aa
2005-08-15 Sebastian Pop <pop@cri.ensmp.fr> 2005-08-15 Sebastian Pop <pop@cri.ensmp.fr>
PR 23391
* Makefile.in (tree-chrec.o): Depends on real.h.
* tree-chrec.c: Include real.h.
(chrec_fold_plus_poly_poly, chrec_fold_multiply_poly_poly,
chrec_fold_plus_1): Use build_real for SCALAR_FLOAT_TYPE_P.
* tree-scalar-evolution.c (add_to_evolution_1,
interpret_rhs_modify_expr): Ditto.
2005-08-15 Sebastian Pop <pop@cri.ensmp.fr>
PR 23386 PR 23386
* tree-data-ref.c (estimate_niter_from_size_of_data): When * tree-data-ref.c (estimate_niter_from_size_of_data): When
step is negative compute the estimation from init downwards to zero. step is negative compute the estimation from init downwards to zero.
......
...@@ -1942,7 +1942,7 @@ tree-browser.o : tree-browser.c tree-browser.def $(CONFIG_H) $(SYSTEM_H) \ ...@@ -1942,7 +1942,7 @@ tree-browser.o : tree-browser.c tree-browser.def $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) tree-inline.h $(DIAGNOSTIC_H) $(HASHTAB_H) \ $(TREE_H) tree-inline.h $(DIAGNOSTIC_H) $(HASHTAB_H) \
$(TM_H) coretypes.h $(TM_H) coretypes.h
tree-chrec.o: tree-chrec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ tree-chrec.o: tree-chrec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(GGC_H) $(TREE_H) tree-chrec.h tree-pass.h $(PARAMS_H) \ $(GGC_H) $(TREE_H) real.h tree-chrec.h tree-pass.h $(PARAMS_H) \
$(DIAGNOSTIC_H) $(VARRAY_H) $(CFGLOOP_H) $(TREE_FLOW_H) $(DIAGNOSTIC_H) $(VARRAY_H) $(CFGLOOP_H) $(TREE_FLOW_H)
tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \ tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TM_H) $(GGC_H) $(TREE_H) real.h $(RTL_H) \ coretypes.h $(TM_H) $(GGC_H) $(TREE_H) real.h $(RTL_H) \
......
/* { dg-do compile } */
void
foo (int N)
{
int C;
double R;
R = 0.0;
do
{
R += 0.001;
C = (int) (R * N);
if (-R * N <= R * N)
{
C++;
}
}
while (C < 0);
return;
}
...@@ -30,6 +30,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -30,6 +30,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "tm.h" #include "tm.h"
#include "ggc.h" #include "ggc.h"
#include "tree.h" #include "tree.h"
#include "real.h"
#include "diagnostic.h" #include "diagnostic.h"
#include "varray.h" #include "varray.h"
#include "cfgloop.h" #include "cfgloop.h"
...@@ -119,7 +120,9 @@ chrec_fold_plus_poly_poly (enum tree_code code, ...@@ -119,7 +120,9 @@ chrec_fold_plus_poly_poly (enum tree_code code,
(CHREC_VARIABLE (poly1), (CHREC_VARIABLE (poly1),
chrec_fold_minus (type, poly0, CHREC_LEFT (poly1)), chrec_fold_minus (type, poly0, CHREC_LEFT (poly1)),
chrec_fold_multiply (type, CHREC_RIGHT (poly1), chrec_fold_multiply (type, CHREC_RIGHT (poly1),
build_int_cst_type (type, -1))); SCALAR_FLOAT_TYPE_P (type)
? build_real (type, dconstm1)
: build_int_cst_type (type, -1)));
} }
if (CHREC_VARIABLE (poly0) > CHREC_VARIABLE (poly1)) if (CHREC_VARIABLE (poly0) > CHREC_VARIABLE (poly1))
...@@ -208,7 +211,9 @@ chrec_fold_multiply_poly_poly (tree type, ...@@ -208,7 +211,9 @@ chrec_fold_multiply_poly_poly (tree type,
CHREC_RIGHT (poly1))); CHREC_RIGHT (poly1)));
/* "2*b*d". */ /* "2*b*d". */
t2 = chrec_fold_multiply (type, CHREC_RIGHT (poly0), CHREC_RIGHT (poly1)); t2 = chrec_fold_multiply (type, CHREC_RIGHT (poly0), CHREC_RIGHT (poly1));
t2 = chrec_fold_multiply (type, build_int_cst_type (type, 2), t2); t2 = chrec_fold_multiply (type, SCALAR_FLOAT_TYPE_P (type)
? build_real (type, dconst2)
: build_int_cst_type (type, 2), t2);
var = CHREC_VARIABLE (poly0); var = CHREC_VARIABLE (poly0);
return build_polynomial_chrec (var, t0, return build_polynomial_chrec (var, t0,
...@@ -285,7 +290,9 @@ chrec_fold_plus_1 (enum tree_code code, ...@@ -285,7 +290,9 @@ chrec_fold_plus_1 (enum tree_code code,
(CHREC_VARIABLE (op1), (CHREC_VARIABLE (op1),
chrec_fold_minus (type, op0, CHREC_LEFT (op1)), chrec_fold_minus (type, op0, CHREC_LEFT (op1)),
chrec_fold_multiply (type, CHREC_RIGHT (op1), chrec_fold_multiply (type, CHREC_RIGHT (op1),
build_int_cst_type (type, -1))); SCALAR_FLOAT_TYPE_P (type)
? build_real (type, dconstm1)
: build_int_cst_type (type, -1)));
default: default:
{ {
......
...@@ -676,7 +676,9 @@ add_to_evolution_1 (unsigned loop_nb, ...@@ -676,7 +676,9 @@ add_to_evolution_1 (unsigned loop_nb,
{ {
var = loop_nb; var = loop_nb;
left = chrec_before; left = chrec_before;
right = build_int_cst (type, 0); right = SCALAR_FLOAT_TYPE_P (type)
? build_real (type, dconst0)
: build_int_cst (type, 0);
} }
else else
{ {
...@@ -1680,7 +1682,9 @@ interpret_rhs_modify_expr (struct loop *loop, tree at_stmt, ...@@ -1680,7 +1682,9 @@ interpret_rhs_modify_expr (struct loop *loop, tree at_stmt,
opnd10 = TREE_OPERAND (opnd1, 0); opnd10 = TREE_OPERAND (opnd1, 0);
chrec10 = analyze_scalar_evolution (loop, opnd10); chrec10 = analyze_scalar_evolution (loop, opnd10);
chrec10 = chrec_convert (type, chrec10, at_stmt); chrec10 = chrec_convert (type, chrec10, at_stmt);
res = chrec_fold_minus (type, build_int_cst (type, 0), chrec10); res = chrec_fold_multiply (type, chrec10, SCALAR_FLOAT_TYPE_P (type)
? build_real (type, dconstm1)
: build_int_cst_type (type, -1));
break; break;
case MULT_EXPR: case MULT_EXPR:
......
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