diff options
author | Yuri Rumyantsev <ysrumyan@gmail.com> | 2014-12-01 12:19:28 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2014-12-01 12:19:28 +0000 |
commit | c78f1e25a5b020c1b72b16263a439f869ab0f696 (patch) | |
tree | 9e9c54f55ed3a87fa7449d607abf74a9e6067d4b /gcc/tree-if-conv.c | |
parent | 64e5228e15ec4f5ccd9ba9ea309ddbeea678f447 (diff) | |
download | gcc-c78f1e25a5b020c1b72b16263a439f869ab0f696.zip gcc-c78f1e25a5b020c1b72b16263a439f869ab0f696.tar.gz gcc-c78f1e25a5b020c1b72b16263a439f869ab0f696.tar.bz2 |
re PR tree-optimization/63941 (ICE on valid code at -O3 and above on x86_64-linux-gnu)
gcc/
PR tree-optimization/63941
* tree-if-conv.c (add_to_predicate_list): Delete wrong assertion that
DOM_BB has non-true predicate, conditionally set non-true predicate
for BB.
gcc/testsuite/
PR tree-optimization/63941
* gcc.dg/torture/pr63941.c: New test.
From-SVN: r218206
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index f7befac..269fda5 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -435,8 +435,10 @@ add_to_predicate_list (struct loop *loop, basic_block bb, tree nc) { gcc_assert (flow_bb_inside_loop_p (loop, dom_bb)); bc = bb_predicate (dom_bb); - gcc_assert (!is_true_predicate (bc)); - set_bb_predicate (bb, bc); + if (!is_true_predicate (bc)) + set_bb_predicate (bb, bc); + else + gcc_assert (is_true_predicate (bb_predicate (bb))); if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Use predicate of bb#%d for bb#%d\n", dom_bb->index, bb->index); |