aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-pre.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-09-21 12:44:07 +0000
committerRichard Guenther <rguenther@suse.de>2012-09-21 12:44:07 +0000
commite02637e9c6a7cc87b77eb3eaa47f986c0260bee7 (patch)
tree341cbdd7ee2fc938b2fa3bacdf901ca539657dd6 /gcc/tree-ssa-pre.c
parentb7f4585a4bec339bc8d3458022f63a0d4a0798ef (diff)
2012-09-21 Richard Guenther <rguenther@suse.de>
PR tree-optimization/54647 * tree-ssa-pre.c (compute_avail): Do not put COND_EXPR or VEC_COND_EXPR into EXP_GEN again. * g++.dg/torture/pr54647.C: New testcase. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@191613 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r--gcc/tree-ssa-pre.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index ab9f2f467c3..d1d97b66abe 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -3981,9 +3981,18 @@ compute_avail (void)
{
case VN_NARY:
{
+ enum tree_code code = gimple_assign_rhs_code (stmt);
vn_nary_op_t nary;
+
+ /* COND_EXPR and VEC_COND_EXPR are awkward in
+ that they contain an embedded complex expression.
+ Don't even try to shove those through PRE. */
+ if (code == COND_EXPR
+ || code == VEC_COND_EXPR)
+ continue;
+
vn_nary_op_lookup_pieces (gimple_num_ops (stmt) - 1,
- gimple_assign_rhs_code (stmt),
+ code,
gimple_expr_type (stmt),
gimple_assign_rhs1_ptr (stmt),
&nary);