summaryrefslogtreecommitdiff
path: root/gcc/tree-scalar-evolution.c
diff options
context:
space:
mode:
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-25 04:32:07 +0000
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-25 04:32:07 +0000
commit9e9aa0c6b103af51f292baa804390fbd7d613ae2 (patch)
treeff5c0fa989635e52fd47b08b03bc861845c35fcb /gcc/tree-scalar-evolution.c
parent9d206f16271e7ec399edbfdd12bde37de9a6ae29 (diff)
downloadgcc-9e9aa0c6b103af51f292baa804390fbd7d613ae2.tar.gz
2009-09-01 Sebastian Pop <sebastian.pop@amd.com>
* tree-scalar-evolution.c (instantiate_scev_binary): Adapted to pass as parameters the operands of the binary expression. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154540 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-scalar-evolution.c')
-rw-r--r--gcc/tree-scalar-evolution.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index 41944972cb8..a6b3e77a08e 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -2235,7 +2235,7 @@ instantiate_scev_poly (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 binary expression to be instantiated.
+ "C0 CODE C1" is a binary expression of type TYPE to be instantiated.
CACHE is the cache of already instantiated values.
@@ -2248,31 +2248,30 @@ instantiate_scev_poly (basic_block instantiate_below,
static tree
instantiate_scev_binary (basic_block instantiate_below,
- struct loop *evolution_loop, tree chrec,
+ struct loop *evolution_loop, tree chrec, enum tree_code code,
+ tree type, tree c0, tree c1,
bool fold_conversions, htab_t cache, int size_expr)
{
tree op1;
tree op0 = instantiate_scev_r (instantiate_below, evolution_loop,
- TREE_OPERAND (chrec, 0), fold_conversions, cache,
+ c0, fold_conversions, cache,
size_expr);
if (op0 == chrec_dont_know)
return chrec_dont_know;
op1 = instantiate_scev_r (instantiate_below, evolution_loop,
- TREE_OPERAND (chrec, 1), fold_conversions, cache,
+ c1, fold_conversions, cache,
size_expr);
if (op1 == chrec_dont_know)
return chrec_dont_know;
- if (TREE_OPERAND (chrec, 0) != op0
- || TREE_OPERAND (chrec, 1) != op1)
+ if (c0 != op0
+ || c1 != op1)
{
- tree type = chrec_type (chrec);
-
op0 = chrec_convert (type, op0, NULL);
op1 = chrec_convert_rhs (type, op1, NULL);
- switch (TREE_CODE (chrec))
+ switch (code)
{
case POINTER_PLUS_EXPR:
case PLUS_EXPR:
@@ -2289,7 +2288,7 @@ instantiate_scev_binary (basic_block instantiate_below,
}
}
- return chrec;
+ return chrec ? chrec : fold_build2 (code, type, c0, c1);
}
/* Analyze all the parameters of the chrec, between INSTANTIATE_BELOW
@@ -2548,6 +2547,9 @@ instantiate_scev_r (basic_block instantiate_below,
case MINUS_EXPR:
case MULT_EXPR:
return instantiate_scev_binary (instantiate_below, evolution_loop, chrec,
+ TREE_CODE (chrec), chrec_type (chrec),
+ TREE_OPERAND (chrec, 0),
+ TREE_OPERAND (chrec, 1),
fold_conversions, cache, size_expr);
CASE_CONVERT: