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
This commit is contained in:
parent
852c19aae4
commit
7e0923cdbf
5 changed files with 50 additions and 7 deletions
|
@ -1,3 +1,13 @@
|
|||
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
|
||||
|
|
|
@ -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) \
|
||||
$(TM_H) coretypes.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)
|
||||
tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \
|
||||
coretypes.h $(TM_H) $(GGC_H) $(TREE_H) real.h $(RTL_H) \
|
||||
|
|
22
gcc/testsuite/gcc.dg/tree-ssa/pr23391.c
Normal file
22
gcc/testsuite/gcc.dg/tree-ssa/pr23391.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* { 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
|
|||
#include "tm.h"
|
||||
#include "ggc.h"
|
||||
#include "tree.h"
|
||||
#include "real.h"
|
||||
#include "diagnostic.h"
|
||||
#include "varray.h"
|
||||
#include "cfgloop.h"
|
||||
|
@ -119,7 +120,9 @@ chrec_fold_plus_poly_poly (enum tree_code code,
|
|||
(CHREC_VARIABLE (poly1),
|
||||
chrec_fold_minus (type, poly0, CHREC_LEFT (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))
|
||||
|
@ -208,7 +211,9 @@ chrec_fold_multiply_poly_poly (tree type,
|
|||
CHREC_RIGHT (poly1)));
|
||||
/* "2*b*d". */
|
||||
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);
|
||||
return build_polynomial_chrec (var, t0,
|
||||
|
@ -284,8 +289,10 @@ chrec_fold_plus_1 (enum tree_code code,
|
|||
return build_polynomial_chrec
|
||||
(CHREC_VARIABLE (op1),
|
||||
chrec_fold_minus (type, op0, CHREC_LEFT (op1)),
|
||||
chrec_fold_multiply (type, CHREC_RIGHT (op1),
|
||||
build_int_cst_type (type, -1)));
|
||||
chrec_fold_multiply (type, CHREC_RIGHT (op1),
|
||||
SCALAR_FLOAT_TYPE_P (type)
|
||||
? build_real (type, dconstm1)
|
||||
: build_int_cst_type (type, -1)));
|
||||
|
||||
default:
|
||||
{
|
||||
|
|
|
@ -676,7 +676,9 @@ add_to_evolution_1 (unsigned loop_nb,
|
|||
{
|
||||
var = loop_nb;
|
||||
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
|
||||
{
|
||||
|
@ -1680,7 +1682,9 @@ interpret_rhs_modify_expr (struct loop *loop, tree at_stmt,
|
|||
opnd10 = TREE_OPERAND (opnd1, 0);
|
||||
chrec10 = analyze_scalar_evolution (loop, opnd10);
|
||||
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;
|
||||
|
||||
case MULT_EXPR:
|
||||
|
|
Loading…
Add table
Reference in a new issue