From: Roger Sayle Date: Sun, 12 Dec 2004 22:33:00 +0000 (+0000) Subject: re PR middle-end/12454 (large number of if ();else if cause) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eeae0768ac4bd7bccefe58bc07f346cedf0d4e7d;p=gcc.git re PR middle-end/12454 (large number of if ();else if cause) 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1abbc26e039..55b467c7db0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-12-12 Roger Sayle + + 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 PR c++/18731 diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 1d10b58ae50..4f38739f1c1 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -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; }