aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-ccp.c
diff options
context:
space:
mode:
authorRoberto Costa <roberto.costa@st.com>2007-01-08 13:52:42 +0000
committerRoberto Costa <robc@gcc.gnu.org>2007-01-08 13:52:42 +0000
commitf255541fb7bdd1b1da1a8c661967021164fa515b (patch)
treedcb7083fc910095eb2aebe069e3d37af32897742 /gcc/tree-ssa-ccp.c
parentfeb8476ac4b9534b99b222ff42ea40900fd7bfe3 (diff)
downloadgcc-f255541fb7bdd1b1da1a8c661967021164fa515b.zip
gcc-f255541fb7bdd1b1da1a8c661967021164fa515b.tar.gz
gcc-f255541fb7bdd1b1da1a8c661967021164fa515b.tar.bz2
Better handling of COND_EXPRs in rhs
From-SVN: r120581
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r--gcc/tree-ssa-ccp.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 493bdec..0f02b8c 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -2109,6 +2109,10 @@ get_maxval_strlen (tree arg, tree *length, bitmap visited, int type)
if (TREE_CODE (arg) != SSA_NAME)
{
+ if (TREE_CODE (arg) == COND_EXPR)
+ return get_maxval_strlen (COND_EXPR_THEN (arg), length, visited, type)
+ && get_maxval_strlen (COND_EXPR_ELSE (arg), length, visited, type);
+
if (type == 2)
{
val = arg;
@@ -2438,6 +2442,13 @@ fold_stmt (tree *stmt_p)
}
}
}
+ else if (TREE_CODE (rhs) == COND_EXPR)
+ {
+ tree temp = fold (COND_EXPR_COND (rhs));
+ if (temp != COND_EXPR_COND (rhs))
+ result = fold_build3 (COND_EXPR, TREE_TYPE (rhs), temp,
+ COND_EXPR_THEN (rhs), COND_EXPR_ELSE (rhs));
+ }
/* If we couldn't fold the RHS, hand over to the generic fold routines. */
if (result == NULL_TREE)