From 9f1054af045a95c4116bcfce3d1486766429bc7a Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Fri, 15 Apr 2005 18:42:38 +0000 Subject: re PR tree-optimization/21031 (Another missed forward propagation opportunity) gcc/ PR tree-optimization/21031 * tree-ssa-forwprop.c (ssa_name_defined_by_comparison_p): New. (forward_propagate_into_cond_1): Call it. Forward propagate integer-integer casts into COND_EXPRs. testsuite/ PR tree-optimization/21031 * gcc.dg/tree-ssa/pr21031.c: New. From-SVN: r98199 --- gcc/tree-ssa-forwprop.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'gcc/tree-ssa-forwprop.c') diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 75fe6e1..a47d69a 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -109,6 +109,23 @@ Boston, MA 02111-1307, USA. */ This will (of course) be extended as other needs arise. */ +/* Given an SSA_NAME VAR, return true if and only if VAR is defined by + a comparison. */ + +static bool +ssa_name_defined_by_comparison_p (tree var) +{ + tree def = SSA_NAME_DEF_STMT (var); + + if (TREE_CODE (def) == MODIFY_EXPR) + { + tree rhs = TREE_OPERAND (def, 1); + return COMPARISON_CLASS_P (rhs); + } + + return 0; +} + /* Forward propagate a single-use variable into COND once. Return a new condition if successful. Return NULL_TREE otherwise. */ @@ -303,6 +320,12 @@ forward_propagate_into_cond_1 (tree cond, tree *test_var_p) || (TREE_CODE (inner_type) == BOOLEAN_TYPE && INTEGRAL_TYPE_P (outer_type))) ; + else if (INTEGRAL_TYPE_P (outer_type) + && INTEGRAL_TYPE_P (inner_type) + && TREE_CODE (TREE_OPERAND (def_rhs, 0)) == SSA_NAME + && ssa_name_defined_by_comparison_p (TREE_OPERAND (def_rhs, + 0))) + ; else return NULL_TREE; -- cgit v1.1