tree-if-conv.c (find_phi_replacement_condition): Unshare "*cond" before forcing it...
authorRichard Guenther <rguenther@suse.de>
Mon, 16 Jul 2007 19:58:45 +0000 (19:58 +0000)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 16 Jul 2007 19:58:45 +0000 (21:58 +0200)
        * tree-if-conv.c (find_phi_replacement_condition): Unshare "*cond"
        before forcing it to gimple operand.

Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>
From-SVN: r126692

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

index 2d99d1f180bc5f0650e125487f33075a301b1662..ab57f35fa516807b119238850ac398c4bec2d4a0 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-16  Richard Guenther  <rguenther@suse.de>
+           Uros Bizjak  <ubizjak@gmail.com>
+
+       * tree-if-conv.c (find_phi_replacement_condition): Unshare "*cond"
+       before forcing it to gimple operand.
+
 2007-07-16  Sandra Loosemore  <sandra@codesourcery.com>
            David Ung  <davidu@mips.com>
 
index b18de42fd3e0831a8f3fcfcb59091b1d9d104a79..044c2b9598c1849e895445f44bb58f861b75ba5d 100644 (file)
@@ -751,7 +751,7 @@ find_phi_replacement_condition (struct loop *loop,
       if (TREE_CODE (*cond) == TRUTH_NOT_EXPR)
        /* We can be smart here and choose inverted
           condition without switching bbs.  */
-         *cond = invert_truthvalue (*cond);
+       *cond = invert_truthvalue (*cond);
       else
        /* Select non loop header bb.  */
        first_edge = second_edge;
@@ -770,9 +770,11 @@ find_phi_replacement_condition (struct loop *loop,
 
   /* Create temp. for the condition. Vectorizer prefers to have gimple
      value as condition. Various targets use different means to communicate
-     condition in vector compare operation. Using gimple value allows compiler
-     to emit vector compare and select RTL without exposing compare's result.  */
-  *cond = force_gimple_operand_bsi (bsi, *cond, false, NULL_TREE,
+     condition in vector compare operation. Using gimple value allows
+     compiler to emit vector compare and select RTL without exposing
+     compare's result.  */
+  *cond = force_gimple_operand_bsi (bsi, unshare_expr (*cond),
+                                   false, NULL_TREE,
                                    true, BSI_SAME_STMT);
   if (!is_gimple_reg (*cond) && !is_gimple_condexpr (*cond))
     {