This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR50780, make comparisons able to throw again ...


This fixes PR50780 by validating a condition is gimple before
substituting it into a COND_EXPR during forwprop.  When looking
at this I noticed that comparisons no longer are marked as
possibly throwing - because of an old tuplification bug :/
Thus, fixed as well, hopefully without fallout.

Bootstrap and regtest running on x86_64-unknown-linux-gnu ...

Richard.

2011-10-19  Richard Guenther  <rguenther@suse.de>

	PR middle-end/50780
	* tree-ssa-forwprop.c (forward_propagate_into_cond): Verify
	the condition is properly gimple before using it.
	* tree-eh (stmt_could_throw_1_p): Properly extract the
	operation type from comparisons.

Index: gcc/tree-ssa-forwprop.c
===================================================================
*** gcc/tree-ssa-forwprop.c	(revision 180186)
--- gcc/tree-ssa-forwprop.c	(working copy)
*************** forward_propagate_into_cond (gimple_stmt
*** 597,603 ****
  	}
      }
  
!   if (tmp)
      {
        if (dump_file && tmp)
  	{
--- 597,604 ----
  	}
      }
  
!   if (tmp
!       && is_gimple_condexpr (tmp))
      {
        if (dump_file && tmp)
  	{
Index: gcc/tree-eh.c
===================================================================
*** gcc/tree-eh.c	(revision 180186)
--- gcc/tree-eh.c	(working copy)
*************** stmt_could_throw_1_p (gimple stmt)
*** 2512,2518 ****
        || TREE_CODE_CLASS (code) == tcc_unary
        || TREE_CODE_CLASS (code) == tcc_binary)
      {
!       t = gimple_expr_type (stmt);
        fp_operation = FLOAT_TYPE_P (t);
        if (fp_operation)
  	{
--- 2512,2524 ----
        || TREE_CODE_CLASS (code) == tcc_unary
        || TREE_CODE_CLASS (code) == tcc_binary)
      {
!       if (is_gimple_assign (stmt)
! 	  && TREE_CODE_CLASS (code) == tcc_comparison)
! 	t = TREE_TYPE (gimple_assign_rhs1 (stmt));
!       else if (gimple_code (stmt) == GIMPLE_COND)
! 	t = TREE_TYPE (gimple_cond_lhs (stmt));
!       else
! 	t = gimple_expr_type (stmt);
        fp_operation = FLOAT_TYPE_P (t);
        if (fp_operation)
  	{


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]