From a819f8453a109032106be130ecaad17a81859569 Mon Sep 17 00:00:00 2001 From: spop Date: Wed, 25 Nov 2009 04:30:10 +0000 Subject: [PATCH] 2009-09-01 Sebastian Pop * tree-scalar-evolution.c (instantiate_scev_poly): New. (instantiate_scev_1): Move code in instantiate_scev_poly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154536 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog.graphite | 5 ++++ gcc/tree-scalar-evolution.c | 62 +++++++++++++++++++++++++++++++-------------- 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 72ed8cd..d4227df 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,5 +1,10 @@ 2009-09-01 Sebastian Pop + * tree-scalar-evolution.c (instantiate_scev_poly): New. + (instantiate_scev_1): Move code in instantiate_scev_poly. + +2009-09-01 Sebastian Pop + * tree-scalar-evolution.c (instantiate_scev_bitnot): New. (instantiate_scev_1): Move code in instantiate_scev_bitnot. diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 6d8bf26..6c9e091 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -2194,6 +2194,47 @@ instantiate_scev_name (basic_block instantiate_below, /* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW and EVOLUTION_LOOP, that were left under a symbolic form. + CHREC is a polynomial chain of recurrence to be instantiated. + + CACHE is the cache of already instantiated values. + + FOLD_CONVERSIONS should be set to true when the conversions that + may wrap in signed/pointer type are folded, as long as the value of + the chrec is preserved. + + SIZE_EXPR is used for computing the size of the expression to be + instantiated, and to stop if it exceeds some limit. */ + +static tree +instantiate_scev_poly (basic_block instantiate_below, + struct loop *evolution_loop, tree chrec, + bool fold_conversions, htab_t cache, int size_expr) +{ + tree op1; + tree op0 = instantiate_scev_1 (instantiate_below, evolution_loop, + CHREC_LEFT (chrec), fold_conversions, cache, + size_expr); + if (op0 == chrec_dont_know) + return chrec_dont_know; + + op1 = instantiate_scev_1 (instantiate_below, evolution_loop, + CHREC_RIGHT (chrec), fold_conversions, cache, + size_expr); + if (op1 == chrec_dont_know) + return chrec_dont_know; + + if (CHREC_LEFT (chrec) != op0 + || CHREC_RIGHT (chrec) != op1) + { + op1 = chrec_convert_rhs (chrec_type (op0), op1, NULL); + chrec = build_polynomial_chrec (CHREC_VARIABLE (chrec), op0, op1); + } + return chrec; +} + +/* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW + and EVOLUTION_LOOP, that were left under a symbolic form. + CHREC is a binary expression to be instantiated. CACHE is the cache of already instantiated values. @@ -2371,25 +2412,8 @@ instantiate_scev_1 (basic_block instantiate_below, fold_conversions, cache, size_expr); case POLYNOMIAL_CHREC: - op0 = instantiate_scev_1 (instantiate_below, evolution_loop, - CHREC_LEFT (chrec), fold_conversions, cache, - size_expr); - if (op0 == chrec_dont_know) - return chrec_dont_know; - - op1 = instantiate_scev_1 (instantiate_below, evolution_loop, - CHREC_RIGHT (chrec), fold_conversions, cache, - size_expr); - if (op1 == chrec_dont_know) - return chrec_dont_know; - - if (CHREC_LEFT (chrec) != op0 - || CHREC_RIGHT (chrec) != op1) - { - op1 = chrec_convert_rhs (chrec_type (op0), op1, NULL); - chrec = build_polynomial_chrec (CHREC_VARIABLE (chrec), op0, op1); - } - return chrec; + return instantiate_scev_poly (instantiate_below, evolution_loop, chrec, + fold_conversions, cache, size_expr); case POINTER_PLUS_EXPR: case PLUS_EXPR: -- 2.7.4