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]

Re: [patch] Cleanup and improvement of if-conversion for vectorization


On Thu, May 27, 2010 at 10:34, Richard Guenther <rguenther@suse.de> wrote:
> Ok with
>
> + ? ? ? ? ? ? ? ? ? unshare_expr (cond), unshare_expr (arg_0),
> + ? ? ? ? ? ? ? ? ? unshare_expr (arg_1));
> + ? ?}
>
> there is no reason to unshare arg_0 or arg_1. ?Neither
>
> ? new_stmt = gimple_build_assign (unshare_expr (PHI_RESULT (phi)), rhs);
>
> PHI_RESULT.
>
> So please remove those.

Fixed like this.

Sebastian
From 2eff27faaec6d34b07c8c8af723707e9048c2011 Mon Sep 17 00:00:00 2001
From: Sebastian Pop <sebpop@gmail.com>
Date: Thu, 27 May 2010 10:21:46 -0500
Subject: [PATCH] Don't generate COND_EXPRs for degenerate_phi_result.

---
 gcc/tree-if-conv.c |   36 +++++++++++++++++++++---------------
 1 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index c338ecb..2729bf3 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -864,31 +864,37 @@ replace_phi_with_cond_gimple_assign_stmt (gimple phi, tree cond,
   gimple new_stmt;
   basic_block bb;
   tree rhs;
-  tree arg_0, arg_1;
+  tree arg;
 
   gcc_assert (gimple_code (phi) == GIMPLE_PHI
 	      && gimple_phi_num_args (phi) == 2);
 
   bb = gimple_bb (phi);
 
-  /* Use condition that is not TRUTH_NOT_EXPR in conditional modify expr.  */
-  if (EDGE_PRED (bb, 1)->src == true_bb)
-    {
-      arg_0 = gimple_phi_arg_def (phi, 1);
-      arg_1 = gimple_phi_arg_def (phi, 0);
-    }
+  arg = degenerate_phi_result (phi);
+  if (arg)
+    rhs = arg;
   else
     {
-      arg_0 = gimple_phi_arg_def (phi, 0);
-      arg_1 = gimple_phi_arg_def (phi, 1);
-    }
+      tree arg_0, arg_1;
+      /* Use condition that is not TRUTH_NOT_EXPR in conditional modify expr.  */
+      if (EDGE_PRED (bb, 1)->src == true_bb)
+	{
+	  arg_0 = gimple_phi_arg_def (phi, 1);
+	  arg_1 = gimple_phi_arg_def (phi, 0);
+	}
+      else
+	{
+	  arg_0 = gimple_phi_arg_def (phi, 0);
+	  arg_1 = gimple_phi_arg_def (phi, 1);
+	}
 
-  /* Build new RHS using selected condition and arguments.  */
-  rhs = build3 (COND_EXPR, TREE_TYPE (PHI_RESULT (phi)),
-	        unshare_expr (cond), unshare_expr (arg_0),
-	        unshare_expr (arg_1));
+      /* Build new RHS using selected condition and arguments.  */
+      rhs = build3 (COND_EXPR, TREE_TYPE (PHI_RESULT (phi)),
+		    unshare_expr (cond), arg_0, arg_1);
+    }
 
-  new_stmt = gimple_build_assign (unshare_expr (PHI_RESULT (phi)), rhs);
+  new_stmt = gimple_build_assign (PHI_RESULT (phi), rhs);
   SSA_NAME_DEF_STMT (gimple_phi_result (phi)) = new_stmt;
   gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
   update_stmt (new_stmt);
-- 
1.7.0.4


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