Bug 30978 - Does not propagate comparison results
Summary: Does not propagate comparison results
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.3.0
: P3 enhancement
Target Milestone: 4.3.0
Assignee: Richard Biener
URL: http://gcc.gnu.org/ml/gcc-patches/200...
Keywords: missed-optimization, TREE
Depends on:
Blocks:
 
Reported: 2007-02-27 10:53 UTC by Richard Biener
Modified: 2007-04-27 15:06 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Richard Biener 2007-02-27 10:53:11 UTC
int foo(int a)
{
  unsigned int b = a > 0;
  char c = b;
  return c;
}

is not optimized to

int foo(int a)
{
  return a > 0;
}

at the tree level.  Forwprop has code to do this if the final propagation
result is in a COND_EXPR.

I have a patch.
Comment 1 Richard Biener 2007-02-27 16:15:29 UTC
Patch posted.
Comment 2 Richard Biener 2007-04-27 14:44:04 UTC
Subject: Bug 30978

Author: rguenth
Date: Fri Apr 27 14:43:42 2007
New Revision: 124217

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124217
Log:
2007-04-27  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/30965
	PR tree-optimization/30978
	* Makefile.in (tree-ssa-forwprop.o): Depend on $(FLAGS_H).
        * tree-ssa-forwprop.c (forward_propagate_into_cond_1): Remove.
        (find_equivalent_equality_comparison): Likewise.
        (simplify_cond): Likewise.
        (get_prop_source_stmt): New helper.
        (get_prop_dest_stmt): Likewise.
	(can_propagate_from): Likewise.
	(remove_prop_source_from_use): Likewise.
        (combine_cond_expr_cond): Likewise.
        (forward_propagate_comparison): New function.
        (forward_propagate_into_cond): Rewrite to use fold for
        tree combining.
	(tree_ssa_forward_propagate_single_use_vars): Call
	forward_propagate_comparison to propagate comparisons.

	* gcc.dg/tree-ssa/pr30978.c: New testcase.
	* gcc.dg/tree-ssa/bool-3.c: Remove XFAIL, explain why.
	* gcc.dg/tree-ssa/ssa-fre-4.c: Use char instead of bool
	* gcc.dg/strict-overflow-5.c: Adjust tree dump scanning.

Added:
    trunk/gcc/testsuite/gcc.dg/tree-ssa/pr30978.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/Makefile.in
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/strict-overflow-5.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/bool-3.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c
    trunk/gcc/tree-ssa-forwprop.c

Comment 3 Richard Biener 2007-04-27 15:06:35 UTC
Fixed.