From b24ca895d7a5e5d18782a230f133cd8346f00c11 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 12 Mar 2014 10:15:08 +0100 Subject: re PR middle-end/60482 (Loop optimization regression) PR middle-end/60482 * tree-vrp.c (register_edge_assert_for_1): Don't add assert if there are multiple uses, but op doesn't live on E edge. * tree-cfg.c (assert_unreachable_fallthru_edge_p): Also ignore clobber stmts before __builtin_unreachable. * gcc.dg/vect/pr60482.c: New test. From-SVN: r208506 --- gcc/tree-vrp.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'gcc/tree-vrp.c') diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 7aa732d..3060210 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -5423,12 +5423,9 @@ register_edge_assert_for_1 (tree op, enum tree_code code, return false; /* We know that OP will have a zero or nonzero value. If OP is used - more than once go ahead and register an assert for OP. - - The FOUND_IN_SUBGRAPH support is not helpful in this situation as - it will always be set for OP (because OP is used in a COND_EXPR in - the subgraph). */ - if (!has_single_use (op)) + more than once go ahead and register an assert for OP. */ + if (live_on_edge (e, op) + && !has_single_use (op)) { val = build_int_cst (TREE_TYPE (op), 0); register_new_assert_for (op, op, code, val, NULL, e, bsi); -- cgit v1.1