re PR middle-end/12454 (large number of if ();else if cause)
authorRoger Sayle <roger@eyesopen.com>
Sun, 12 Dec 2004 22:33:00 +0000 (22:33 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Sun, 12 Dec 2004 22:33:00 +0000 (22:33 +0000)
PR middle-end/12454
* cp-gimplify.c (gimplify_if_stmt): Optimize the case where the
condition is a constant and the unexecuted clause is empty.

From-SVN: r92067

gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c

index 1abbc26e039df6ffbdd6e42da448cab8ae87f21b..55b467c7db07e37f03a31e8f74a1b34883be6f5d 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-12  Roger Sayle  <roger@eyesopen.com>
+
+       PR middle-end/12454
+       * cp-gimplify.c (gimplify_if_stmt): Optimize the case where the
+       condition is a constant and the unexecuted clause is empty.
+
 2004-12-10  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        PR c++/18731
index 1d10b58ae505c2b1be261abf5844320d3f545dea..4f38739f1c10faf69b6df537ee81a433944361bc 100644 (file)
@@ -85,9 +85,10 @@ genericize_eh_spec_block (tree *stmt_p)
 static void
 gimplify_if_stmt (tree *stmt_p)
 {
-  tree stmt, then_, else_;
+  tree stmt, cond, then_, else_;
 
   stmt = *stmt_p;
+  cond = IF_COND (stmt);
   then_ = THEN_CLAUSE (stmt);
   else_ = ELSE_CLAUSE (stmt);
 
@@ -96,7 +97,12 @@ gimplify_if_stmt (tree *stmt_p)
   if (!else_)
     else_ = build_empty_stmt ();
 
-  stmt = build3 (COND_EXPR, void_type_node, IF_COND (stmt), then_, else_);
+  if (integer_nonzerop (cond) && !TREE_SIDE_EFFECTS (else_))
+    stmt = then_;
+  else if (integer_zerop (cond) && !TREE_SIDE_EFFECTS (then_))
+    stmt = else_;
+  else
+    stmt = build3 (COND_EXPR, void_type_node, cond, then_, else_);
   *stmt_p = stmt;
 }