From 890065bfe4a9d3367568a2f5a9a12b6289f377d0 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Sun, 18 Jan 2009 15:51:12 +0000 Subject: re PR tree-optimization/38819 (trapping expression wrongly hoisted out of loop) 2009-01-18 Richard Guenther PR tree-optimization/38819 * tree-flow.h (operation_could_trap_helper_p): Declare. * tree-eh.c (operation_could_trap_helper_p): Export. * tree-ssa-sccvn.h (vn_nary_may_trap): Declare. * tree-ssa-sccvn.c (vn_nary_may_trap): New function. * tree-ssa-pre.c (insert_into_preds_of_block): Check if we are about to insert a possibly trapping instruction and fail in this case. * gcc.c-torture/execute/pr38819.c: New testcase. From-SVN: r143485 --- gcc/tree-ssa-pre.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'gcc/tree-ssa-pre.c') diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 0a4fb6d..0717a36 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3004,6 +3004,15 @@ insert_into_preds_of_block (basic_block block, unsigned int exprnum, } } + /* Make sure we are not inserting trapping expressions. */ + FOR_EACH_EDGE (pred, ei, block->preds) + { + bprime = pred->src; + eprime = avail[bprime->index]; + if (eprime->kind == NARY + && vn_nary_may_trap (PRE_EXPR_NARY (eprime))) + return false; + } /* Make the necessary insertions. */ FOR_EACH_EDGE (pred, ei, block->preds) -- cgit v1.1