]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Don't generate COND_EXPRs for degenerate_phi_result.
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 May 2010 18:42:06 +0000 (18:42 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 May 2010 18:42:06 +0000 (18:42 +0000)
2010-05-28  Sebastian Pop  <sebastian.pop@amd.com>

* tree-if-conv.c (replace_phi_with_cond_gimple_assign_stmt): Don't
generate COND_EXPRs for degenerate_phi_result.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159991 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-if-conv.c

index bd8239ee80a4517c5f8833886f92abf0aefa084b..d2d4f2db3bbca363bec735cd0b780ca5e8637a69 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-28  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * tree-if-conv.c (replace_phi_with_cond_gimple_assign_stmt): Don't
+       generate COND_EXPRs for degenerate_phi_result.
+
 2010-05-28  Sebastian Pop  <sebastian.pop@amd.com>
 
        PR middle-end/44293
index c338ecbe6f02f24c337f59e32e4587d74043dc22..2729bf3cf159d3a7b0dadb5986027f4b4d976e0c 100644 (file)
@@ -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);