From 61514fe46313e7ecfdec799f9033c788e1e0f710 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 21 Sep 2012 12:44:07 +0000 Subject: re PR tree-optimization/54647 (Segmentation fault in get_expr_value_id with -O2) 2012-09-21 Richard Guenther 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. From-SVN: r191613 --- gcc/tree-ssa-pre.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'gcc/tree-ssa-pre.c') diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index ab9f2f4..d1d97b6 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); -- cgit v1.1