mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-27 10:03:58 +08:00
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
This commit is contained in:
parent
6ba40dd7ac
commit
9f1054af04
@ -1,3 +1,10 @@
|
||||
2005-04-15 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
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.
|
||||
|
||||
2005-04-15 Dave Korn <dave.korn@artimi.com>
|
||||
|
||||
* gcc.c (default_compilers): Clarify obscure error message when
|
||||
|
@ -1,3 +1,8 @@
|
||||
2005-04-15 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
PR tree-optimization/21031
|
||||
* gcc.dg/tree-ssa/pr21031.c: New.
|
||||
|
||||
2005-04-15 Uros Bizjak <uros@kss-loka.si>
|
||||
|
||||
PR tree-optimization/21004
|
||||
|
20
gcc/testsuite/gcc.dg/tree-ssa/pr21031.c
Normal file
20
gcc/testsuite/gcc.dg/tree-ssa/pr21031.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* PR tree-optimization/21031
|
||||
|
||||
Make sure that a != 0 is propagated into the "if" statement. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1 -fdump-tree-forwprop1-details" } */
|
||||
|
||||
int
|
||||
foo (int a)
|
||||
{
|
||||
int b = a != 0;
|
||||
unsigned char c = b;
|
||||
if (c)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Replaced" 2 "forwprop1"} } */
|
||||
/* { dg-final { cleanup-tree-dump "forwprop1" } } */
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user