diff options
author | Richard Biener <rguenther@suse.de> | 2016-05-12 13:46:26 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-05-12 13:46:26 +0000 |
commit | 1ef33ef304cedbeca446e79d677cd18036a5dc66 (patch) | |
tree | 08146efd808e84c14b2bdd4c476c5540b75f9f33 /gcc/tree-ssa-pre.c | |
parent | 763baff6f54ec6070e0ec6497363f5116ab4c874 (diff) | |
download | gcc-1ef33ef304cedbeca446e79d677cd18036a5dc66.zip gcc-1ef33ef304cedbeca446e79d677cd18036a5dc66.tar.gz gcc-1ef33ef304cedbeca446e79d677cd18036a5dc66.tar.bz2 |
re PR tree-optimization/71059 (gcc ICE at -O3 on valid code on x86_64-linux-gnu in "vn_nary_op_insert_into")
2016-05-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/71059
* tree-ssa-pre.c (phi_translate_1): Fully fold translated
nary before looking up or entering the expression into the VN
hashes.
* tree-ssa-sccvn.c (vn_nary_build_or_lookup): Fix comment typo.
Make sure to re-use NARYs without result as inserted by
phi-translation.
* gcc.dg/torture/pr71059.c: New testcase.
From-SVN: r236175
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 4a771d3..3ce87d9 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1464,6 +1464,12 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, pre_expr constant; unsigned int new_val_id; + PRE_EXPR_NARY (expr) = newnary; + constant = fully_constant_expression (expr); + PRE_EXPR_NARY (expr) = nary; + if (constant != expr) + return constant; + tree result = vn_nary_op_lookup_pieces (newnary->length, newnary->opcode, newnary->type, @@ -1478,10 +1484,6 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, if (nary) { PRE_EXPR_NARY (expr) = nary; - constant = fully_constant_expression (expr); - if (constant != expr) - return constant; - new_val_id = nary->value_id; get_or_alloc_expression_id (expr); } @@ -1495,9 +1497,6 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, &newnary->op[0], result, new_val_id); PRE_EXPR_NARY (expr) = nary; - constant = fully_constant_expression (expr); - if (constant != expr) - return constant; get_or_alloc_expression_id (expr); } add_to_value (new_val_id, expr); |